主题:[讨论]火星人加法???
Description
在公元22世纪, 科学家们发现火星上居住者有智慧的生命-火星人. 火星人非常爱好数学,每年都会在火星上举行一个算术竞赛。竞赛的任务是计算两个100位的数字之和,使用最短时间计算出正确结果的将成为优胜者。这一年他们也邀请了来自地球上的人们来一起参加这个竞赛。
作为唯一的来自地球的代表,你将被送往火星去展示人类的智慧。很幸运的是你随身带了笔记本电脑,它可以更方便的帮助你完成这个任务。现在剩下的任务只是需要编写一个小程序来计算两个数字的和。但是,在编写程序之前,你要注意火星人使用的是20进制的数字系统,因为他们通常拥有20个手指...
Input
给定几组火星人的数字,每个数字一行。
火星人的数字由0到9以及a到j(代表10到19)的字符构成。数字的最大位数是100.
Output
针对每两个数字计算出一个结果,每个结果输出一行.
Sample Input
1234567890
abcdefghij
99999jjjjj
9999900001
Sample Output
bdfi02467j
iiiij00000
》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//火星人加法
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char NUM_1[101]={'0'},NUM_2[101]={'0'},NUM_1temp[101]={'0'},NUM_2temp[101]={'0'},SUM[101]={'0'};
int len,temp_1,temp_2,tempsum,len_1,len_2,i,j,sum_;
while(cin>>NUM_1temp>>NUM_2temp)
{
//倒序复制两个字符串
len_1=strlen(NUM_1temp);
for(i=len_1-1,j=0;i>=0;j++,i--)
{
NUM_1[j]=NUM_1temp[i];
}
NUM_1[len_1]='\0';
len_2=strlen(NUM_2temp);
for(i=len_2-1,j=0;i>=0;j++,i--)
{
NUM_2[j]=NUM_2temp[i];
}
NUM_2[len_2]='\0';
//计算阶段
for(i=0;i<(len_1>len_2?len_1:len_2);i++)
{
if(NUM_1[i]>='0'&&'9'>=NUM_1[i]) temp_1=NUM_1[i]-'0';
else if(NUM_1[i]>='a'&&'j'>=NUM_1[i]) temp_1=NUM_1[i]-'a'+10;
if(NUM_2[i]>='0'&&'9'>=NUM_2[i]) temp_2=NUM_2[i]-'0';
else if(NUM_2[i]>='a'&&'j'>=NUM_2[i]) temp_2=NUM_2[i]-'a'+10;
if(SUM[i]>='0'&&'9'>=SUM[i]) sum_=SUM[i]-'0';
else if(SUM[i]>='a'&&'j'>=SUM[i]) sum_=SUM[i]-'a'+10;
tempsum=sum_;
tempsum+=temp_1+temp_2;
if(tempsum>19)
{tempsum-=19;SUM[i+1]='1';}
else if(tempsum>9) SUM[i]=tempsum-10+'a';
else if(tempsum<=9) SUM[i]=tempsum+'0';
}
cout<<SUM<<endl;
SUM[i]='\0';
for(len=0;SUM[len]!='\0';len++)
for(i=len;i>=0;i++)
cout<<SUM[i];
cout<<endl;
//初始化数组
for(i=0;i<101;i++)
{
NUM_1temp[i]=NUM_1temp[i]=SUM[i]='0';
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
》》》》》》》》》》》》》》》》》》》》》》》
运行出错了,可能是字符串结束符的问题,求真相!!!!!!!!
在公元22世纪, 科学家们发现火星上居住者有智慧的生命-火星人. 火星人非常爱好数学,每年都会在火星上举行一个算术竞赛。竞赛的任务是计算两个100位的数字之和,使用最短时间计算出正确结果的将成为优胜者。这一年他们也邀请了来自地球上的人们来一起参加这个竞赛。
作为唯一的来自地球的代表,你将被送往火星去展示人类的智慧。很幸运的是你随身带了笔记本电脑,它可以更方便的帮助你完成这个任务。现在剩下的任务只是需要编写一个小程序来计算两个数字的和。但是,在编写程序之前,你要注意火星人使用的是20进制的数字系统,因为他们通常拥有20个手指...
Input
给定几组火星人的数字,每个数字一行。
火星人的数字由0到9以及a到j(代表10到19)的字符构成。数字的最大位数是100.
Output
针对每两个数字计算出一个结果,每个结果输出一行.
Sample Input
1234567890
abcdefghij
99999jjjjj
9999900001
Sample Output
bdfi02467j
iiiij00000
》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//火星人加法
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main()
{
char NUM_1[101]={'0'},NUM_2[101]={'0'},NUM_1temp[101]={'0'},NUM_2temp[101]={'0'},SUM[101]={'0'};
int len,temp_1,temp_2,tempsum,len_1,len_2,i,j,sum_;
while(cin>>NUM_1temp>>NUM_2temp)
{
//倒序复制两个字符串
len_1=strlen(NUM_1temp);
for(i=len_1-1,j=0;i>=0;j++,i--)
{
NUM_1[j]=NUM_1temp[i];
}
NUM_1[len_1]='\0';
len_2=strlen(NUM_2temp);
for(i=len_2-1,j=0;i>=0;j++,i--)
{
NUM_2[j]=NUM_2temp[i];
}
NUM_2[len_2]='\0';
//计算阶段
for(i=0;i<(len_1>len_2?len_1:len_2);i++)
{
if(NUM_1[i]>='0'&&'9'>=NUM_1[i]) temp_1=NUM_1[i]-'0';
else if(NUM_1[i]>='a'&&'j'>=NUM_1[i]) temp_1=NUM_1[i]-'a'+10;
if(NUM_2[i]>='0'&&'9'>=NUM_2[i]) temp_2=NUM_2[i]-'0';
else if(NUM_2[i]>='a'&&'j'>=NUM_2[i]) temp_2=NUM_2[i]-'a'+10;
if(SUM[i]>='0'&&'9'>=SUM[i]) sum_=SUM[i]-'0';
else if(SUM[i]>='a'&&'j'>=SUM[i]) sum_=SUM[i]-'a'+10;
tempsum=sum_;
tempsum+=temp_1+temp_2;
if(tempsum>19)
{tempsum-=19;SUM[i+1]='1';}
else if(tempsum>9) SUM[i]=tempsum-10+'a';
else if(tempsum<=9) SUM[i]=tempsum+'0';
}
cout<<SUM<<endl;
SUM[i]='\0';
for(len=0;SUM[len]!='\0';len++)
for(i=len;i>=0;i++)
cout<<SUM[i];
cout<<endl;
//初始化数组
for(i=0;i<101;i++)
{
NUM_1temp[i]=NUM_1temp[i]=SUM[i]='0';
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
》》》》》》》》》》》》》》》》》》》》》》》
运行出错了,可能是字符串结束符的问题,求真相!!!!!!!!