【洛谷 P2084】进制转换 题解(模拟+字符串)

进制转换

题目背景

题目描述

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

1*24+0*23+1*22+0*21+1*2^0,

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

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

2 10101

样例输出 #1

1*2^4+1*2^2+1*2^0

提示

对于100%的数据,1


思路

首先,从输入中读取一个整数m和一个字符串s。

代码中的变量i被初始化为字符串s的长度减1,这是因为在多项式中,最高位的指数是长度减1。接着,它设置一个标志变量flg,用于判断是否是第一个非零的字符,以决定是否需要输出一个加号。

然后,程序开始遍历字符串s中的每个字符。对于每个字符,如果它不是’0’,那么就输出这个字符和它的指数。这个指数是字符在字符串中的位置,从右到左,从0开始。如果这不是第一个非零的字符,那么在输出字符和它的指数之前,还会输出一个加号。

输出的格式是printf("%c*%d^%d", *it, m, i);,其中%c是字符,*是乘号,%d是整数,^是指数符号。在每次遍历后,i都会减1,因为我们是从字符串的末尾向前遍历。


AC代码

#include 
#define AUTHOR "HEX9CF"
using namespace std;

int main() {
	int m;
	string s;
	cin >> m >> s;
	int i = s.size() - 1;
	bool flg = 0;
	for (auto it = s.begin(); it != s.end(); it++) {
		if (*it != '0') {
			if (!flg) {
				flg = 1;
			} else {
				putchar('+');
			}
			printf("%c*%d^%d", *it, m, i);
		}
		i--;
	}
	return 0;
}

你可能感兴趣的:(Algorithm,Problems,算法)