洛谷C++简单练习day4

发布时间:2024年01月24日

day4---进制转化---1.22

习题概述

题目描述

今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 :

1*2^4+0*2^3+1*2^2+0*2^1+1*2^0,

那么请你编程实现,将一个M进制的数N转换成十进制表示的式子。

注意:当系数为0时,该单项式要省略。

输入格式

两个数,M和N,中间用空格隔开。

输出格式

共一行,一个十进制表示的式子。

代码部分

#include <iostream>
#include <queue>
using namespace std;

int main() {
    int n; // 读一个整数
    cin >> n;
    
    int x, qaq = 0; // x记录输入数字的位数,qaq记录输入数字中非零数字的个数
    char a; // 读取每个字符
    
    queue<char> q, qq; // 两队列:q存储输入数字的每个位数,qq用于备份q的内容
    
    cin >> a;
    while (a != '0') //当读取到字符 '0' 时结束循环,输入串时末尾要添加0
    {
        q.push(a); //将字符添加到队列q中
        qaq += (a - '0'); //非零字符的个数累加到变量qaq
        cin >> a; // 读取下一个字符
    }

    // 输出队列q中存储的每个位数
    cout << "输入数字的每个位数:" << endl;
    while (!q.empty()) {
        cout << q.front() << " "; // 输出队列q的首个字符
        qq.push(q.front()); // 将队列q的首个字符添加到队列qq中
        q.pop(); // 移除队列q的首个字符
    }
    cout << endl;

    x = qq.size(); // 计算队列qq的大小,即输入数字的位数
    cout << "输入数字的非零位数个数:" << qaq << endl;
    cout << "输入数字的位数:" << x << endl;
    
    cout << "转换为十进制表示的式子:" << endl;
    while (!qq.empty()) {
        x--;
        if (qq.front() != '0') // 如果队列qq的首个字符不是 '0'
		{ 
            qaq--; // 非零字符的个数减一
            cout << qq.front() << '*' << n << '^' << x; // 输出当前位数的字符和指数
            if (x != 0 && qaq != 0)//若还有剩余的位数和非零字符
                cout << '+';
        }
        qq.pop(); // 移除队列qq的首个字符
    }
    cout << endl;

    return 0;
}

心得体会

qaq += (a - '0');??非零字符的个数累加到变量qaq

&&? ?两个式子都为真时才算正确

思路:

1.首先读取一个整数n,表示进制M。

2.然后定义变量x和qaq,分别用于记录输入数字的位数和非零数字的个数。

3.使用队列q和qq来存储输入数字的每个位数,其中qq是q的备份。

4.通过循环读取字符a,当读取到字符'0'时结束循环。循环过程中,将字符a添加到队列q中,并累加非零字符的个数到变量qaq。

5.输出队列q中存储的每个位数,并将队列q的内容备份到队列qq中。

6.计算队列qq的大小,即输入数字的位数,并输出非零位数个数和位数信息。

7.输出转换为十进制表示的式子。遍历队列qq,每次取出首个字符。如果该字符不是'0',则输出当前位数的字符和指数,并根据是否还有剩余的位数和非零字符来决定是否输出加号。

核心代码:

cout << "转换为十进制表示的式子:" << endl;
while (!qq.empty()) {
    x--;
    if (qq.front() != '0') { 
        qaq--;
        cout << qq.front() << '*' << n << '^' << x;
        if (x != 0 && qaq != 0)
            cout << '+';
    }
    qq.pop();
}
cout << endl;

这段代码实现了将输入数字转换为十进制表示的式子并输出。它通过遍历队列qq,每次取出队列的首个字符进行处理。如果首个字符不是'0',则输出当前位数的字符和指数,并根据是否还有剩余的位数和非零字符来决定是否输出加号。

文章来源:https://blog.csdn.net/weixin_63597914/article/details/135759854
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。