题目描述
进制转换,比如(10101)2 ,十进制表示的式子 :
1*2^4+0*2^3+1*2^2+0*2^1+1*2^0,
那么请你编程实现,将一个M进制的数N转换成十进制表示的式子。
注意:当系数为0时,该单项式要省略。
输入格式
两个数,M和N,中间用空格隔开。
输出格式
共一行,一个十进制表示的式子。
输入输出样例
输入
2 10101
输出
1*2^4+1*2^2+1*2^0
#include <iostream>
#include <cstring>//错误!用strlen一定要加载cstring!!!
using namespace std;
int main()
{
int base;//num;pos=-1;pos=0;末位pos初始值应该-1,以便第一次++
//int ans[1000]={0};错误!!!要用字符串!
char ans[1001];
cin>>base>>ans;
int len=strlen(ans);
for(int i=0;i<len;++i)
{
if(i!=0 && ans[i]!='0')//非首项且数字非0,在前面添加+号
cout<<"+";
if(ans[i]!='0')//该位置非0则转化,若为0则跳过
cout<<ans[i]<<"*"<<base<<"^"<<len-1-i;//注意幂的次数=数字长度-1-位序;或者用新变量记录冪级
}
cout<<endl;
/* {//不需要反向输出,注意输出到倒数第二位
if(ans[i]-'0')
cout<<ans[i]<<"*"<<base<<"^"<<strlen(ans)-1-i<<"+";
}
//失误!if(ans[strlen(ans)-1])应该转换为数字;‘0’不为0
if(ans[strlen(ans)-1]-'0')//失误!!!最后系数为0,会多个+号!
cout<<ans[strlen(ans)-1]<<"*"<<base<<"^"<<0<<endl;
/*惯性错误!习惯用余数法求数码
//cin>>base>>num; 错误!!!数值可达1000位,不能用int存储
for(int i=0;num>0;++i)//注意保留末位的下标,便于反向输出
{
ans[i]=num%10;
num/=10;
++pos;//此前pos初始化为-1
}
for(;pos>0;--pos)//反向输出到倒数第二位,最后位特殊处理:不带+号
{
if(ans[pos])//t跳过系数0,下标与幂次数相同
cout<<ans[pos]<<"*"<<base<<"^"<<pos<<"+";
}
if(ans[pos])
cout<<ans[pos]<<"*"<<base<<"^"<<pos<<endl;*/
return 0;
}