程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 題目1471: A+B without carry

題目1471: A+B without carry

編輯:C++入門知識

題目描述 Xiao Ming always tends to ignore the carry when he does decimal addition with paper and pencil.For example,15+17,Xiao Ming will answer 22,because he ignores the carry from the single digits.5+7=12,and the digit 1 is the carry.          輸入 The input will consist of a series of pairs of integers a and b(both less than 1000000000),separated by a space, one pair of integers per line.       輸出 For each pair of input integers a and b you should output the correct answer of the sum of a and b,a space character and Xiao Ming's answer of the sum of a and b in one line,and with one line of output for each line in input.If Xiao Ming's answer begins with zero,don't output unnecessary zero.       樣例輸入 15 16 1 999 31 71    樣例輸出 31 21 1000 990 102 2    提示 [+] *** 提示已隱藏,點擊上方 [+] 可顯示 ***       來源 2013年浙江大學復試機試模擬題                 [cpp]  /*********************************  *   日期:2013-3-25  *   作者:SJF0115  *   題號: 題目1471: A+B without carry  *   來源:http://acmclub.com/problem.php?id=1471  *   結果:AC  *   來源:2013年浙江大學復試機試模擬題  *   總結:  **********************************/   #include<stdio.h>    #include<string.h>    #include<stdlib.h>    int main()   {       int a,b,len1,len2,index,i,j;       char str1[11],str2[11],c[11];       //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);        while(scanf("%s %s",str1,str2)!=EOF){           len1 = strlen(str1);           len2 = strlen(str2);           index = 0;           //小明的計算過程            for(i = len1-1,j = len2-1;i >= 0 && j >= 0;i--,j--){               int sum = str1[i] - '0' + str2[j] - '0';               //忽略進位                if(sum > 9){                   sum -= 10;               }               c[index++] = sum + '0';           }           while(i >= 0){               c[index++] = str1[i];               i--;           }           while(j >= 0){               c[index++] = str2[j];               j--;           }           //去掉前導0            index = index -1;           while(c[index] == '0' && index > 0){               index--;           }           //正確答案            printf("%d ",atoi(str1) + atoi(str2));           //小明的答案            for(i = index;i >= 0;i--){               printf("%c",c[i]);           }           printf("\n");             }       return 0;   }     /********************************* *   日期:2013-3-25 *   作者:SJF0115 *   題號: 題目1471: A+B without carry *   來源:http://acmclub.com/problem.php?id=1471 *   結果:AC *   來源:2013年浙江大學復試機試模擬題 *   總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int a,b,len1,len2,index,i,j; char str1[11],str2[11],c[11]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%s %s",str1,str2)!=EOF){ len1 = strlen(str1); len2 = strlen(str2); index = 0; //小明的計算過程 for(i = len1-1,j = len2-1;i >= 0 && j >= 0;i--,j--){ int sum = str1[i] - '0' + str2[j] - '0'; //忽略進位 if(sum > 9){ sum -= 10; } c[index++] = sum + '0'; } while(i >= 0){ c[index++] = str1[i]; i--; } while(j >= 0){ c[index++] = str2[j]; j--; } //去掉前導0 index = index -1; while(c[index] == '0' && index > 0){ index--; } //正確答案 printf("%d ",atoi(str1) + atoi(str2)); //小明的答案 for(i = index;i >= 0;i--){ printf("%c",c[i]); } printf("\n");     } return 0; }                   [cpp]  /*********************************  *   日期:2013-3-25  *   作者:SJF0115  *   題號: 題目1471: A+B without carry  *   來源:http://acmclub.com/problem.php?id=1471  *   結果:AC  *   來源:2013年浙江大學復試機試模擬題  *   總結:  **********************************/   #include<stdio.h>    #include<string.h>    #include<stdlib.h>       int main()   {       int a,b,index;       int c[12];       //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);        while(scanf("%d %d",&a,&b)!=EOF){           //正確答案            printf("%d ",a + b);           //求小名的答案            if(a == 0 && b == 0){               printf("%d",a + b);           }           index = 0;           while(a || b){               int sum = a % 10 + b % 10;               if(sum > 9){                   sum -= 10;               }               c[index++] = sum;               a /= 10;               b /= 10;           }           //去掉前導0            index = index - 1;           while(c[index] == 0 && index > 0){               index--;           }           //輸出答案            for(int i = index;i >= 0;i--){               printf("%d",c[i]);           }           printf("\n");       }       return 0;   }     /********************************* *   日期:2013-3-25 *   作者:SJF0115 *   題號: 題目1471: A+B without carry *   來源:http://acmclub.com/problem.php?id=1471 *   結果:AC *   來源:2013年浙江大學復試機試模擬題 *   總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h>   int main() { int a,b,index; int c[12]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d %d",&a,&b)!=EOF){ //正確答案 printf("%d ",a + b); //求小名的答案 if(a == 0 && b == 0){ printf("%d",a + b); } index = 0; while(a || b){ int sum = a % 10 + b % 10; if(sum > 9){ sum -= 10; } c[index++] = sum; a /= 10; b /= 10; } //去掉前導0 index = index - 1; while(c[index] == 0 && index > 0){ index--; } //輸出答案 for(int i = index;i >= 0;i--){ printf("%d",c[i]); } printf("\n"); } return 0; } 第二種方法時忘記了a = 0 b = 0的情況wrong了好幾次.........                     這種方法很有意思,自己沒有想到.........     [cpp]  #include <stdio.h>    int a,b;   void run()   {           int c,k;           c=a+b;           printf("%d ",c);//這個程序是由正常的和來反求不進位的和(或者直接按位相加也是可以的 )。             k=1;           while(k<=a||k<=b)           {                   if(a/k%10+b/k%10>9)                           c-=k*10;//在某一位上的進位被忽略,相當於總和減小了這一位權值的十倍,個位進位被忽略,總和就少了10。                     k*=10;           }           printf("%d\n",c);   }   int main()   {           while(scanf("%d%d",&a,&b)!=EOF)                   run();           return 0;   }      #include <stdio.h> int a,b; void run() {         int c,k;         c=a+b;         printf("%d ",c);//這個程序是由正常的和來反求不進位的和(或者直接按位相加也是可以的 )。          k=1;         while(k<=a||k<=b)         {                 if(a/k%10+b/k%10>9)                         c-=k*10;//在某一位上的進位被忽略,相當於總和減小了這一位權值的十倍,個位進位被忽略,總和就少了10。                  k*=10;         }         printf("%d\n",c); } int main() {         while(scanf("%d%d",&a,&b)!=EOF)                 run();         return 0; }   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved