P2084 进制转换

时间:2024-01-21 23:46:15

原题链接 https://www.luogu.org/problemnew/show/P2084

这个题的思路就是先将输入的数字存到字符数组里,然后求出这一串数字中的非0元素的个数total,并记录最后一位非0元素的位置。输出时,先输出total-1个,最后再补上第total个,这样加号的问题就解决了。(有比我方法更简单的大佬勿喷本蒟蒻)废话少说,上代码!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n,len,total=0,p=0,h;            //len求输入的数字的长度,total表示数字串中的非0元素,h用来记录最后一位非0元素的位置
char a[1001];      
cin>>n>>a;                              //注意a后面不加任何东西
len=strlen(a);                          //求数组a的长度len
for(int i=0;i<len;i++)
if(a[i]!='0') total++;                   //计算非0元素的个数
for(int i=0;i<len;i++) 
{if(a[i]!='0')

{p++;if(p==total) h=i;}}            //每找到一位非0元素p++,当p==total时,说明是最后一位非0元素,用h记录当前的位置i    
for(int i=0;i<=len-1;i++)           //输出
{if(a[i]!='0'&&i!=h) {cout<<a[i]<<"*"<<n<<"^"<<len-1-i<<"+";}}         //i!=0是为了让它只输出a【h】前面的数,只是单纯的处理加号的问题.....
cout<<a[h]<<"*"<<n<<"^"<<len-1-h;                                       //输出最后一位非0元素a【h】
return 0;                                 //完美结束!!!

}