洛谷 2084 二至九进制转化为十进制

题目描述

进制转换,比如(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;
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值