设有一个字符串A $的结构为:A $ ='m <n> p'
其中米为数字串(长度<= 20),而N,P均为1或2位的数字串(其中所表达的内容在2-10之间)。
要求:从键盘上读入甲$后(不用正确性检查),将甲$中的数字串米(N进制),以p进制的形式输出。
例如:48 <10> 8
其意义为:将10进制数48,转换成8进制数输出。
输出结果为:60 <8>
这个题目纯属自己想出来的算法,
可以说完全按照第一思路写出来的,肯定不是最佳算法,不过也AC啦。以下贴上代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main (void)
{
char a[100],digit[100]={0},digit1[100]={0},digit2[100]={0};
int shuzi1=0,jinzhi=0,shuzi2=0,yushu=0,shang=0,shuzu[100]={0},shuzi[100],t1=0,x=0;
int length,i=0,t=0;
scanf("%s",a);
length=strlen(a);
for(i=0;i<length;i++){
if(a[i]=='<')
break;
digit[i]=a[i];;
}
i++;
for(;i<length;i++){
if(a[i]=='>')
break;
digit1[t]=a[i];
t++;
}
i++;
t=0;
for(;i<length;i++){
digit2[t]=a[i];
t++;
}
shuzi1=atoi(digit);
jinzhi=atoi(digit1);
shuzi2=atoi(digit2);
if(jinzhi!=10){
x=shuzi1;
while(x!=0){
shuzi[t1]=x%10;
x=x/10;
t1++;
}
shuzi1=0;
for(int i=t1-1;i>=0;i--){
shuzi1=shuzi1+shuzi[i]*pow(jinzhi,i);
}
}
jinzhi=10;
if(jinzhi==10)
{
shuzu[yushu]=shuzi1%shuzi2;
shang=shuzi1/shuzi2;
yushu++;
while(shang!=0){
shuzu[yushu]=shang%shuzi2;
shang=shang/shuzi2;
yushu++;
}
for(int i=yushu-1;i>=0;i--)
printf("%d",shuzu[i]);
printf("<%d>",shuzi2);
}
}
思路很简单,以‘<’,‘>’字符为分隔符,将输入的字符串分割成待转换的数字,原来的进制,需要转换的进制三个字符串,然后用atoi方法将三个字符串转换成int型的数字。
然后就是进制转换算法,进制之间如何转化这里不多加赘述,如果原来的数字是十进制的,则直接进行进制转换,如果不是十进制,则将数字先转换成十进制,再进行进制转换。
NOOB纯手打,如有不足,欢迎指正!