回 帖 发 新 帖 刷新版面

主题:[讨论]火星人加法???

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;
}
》》》》》》》》》》》》》》》》》》》》》》》
运行出错了,可能是字符串结束符的问题,求真相!!!!!!!!

回复列表 (共1个回复)

沙发


那个cout<<SUM<<endl;是错的,发的时候忘了弄回去了。。。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册