洛谷C++简单练习day4

本文介绍了如何使用C++编程实现将M进制数转换为十进制表示的式子,利用队列存储输入数字的位数,并通过遍历队列计算每个位的权重并输出结果。
摘要由CSDN通过智能技术生成

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',则输出当前位数的字符和指数,并根据是否还有剩余的位数和非零字符来决定是否输出加号。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值