这种题有多种写法:
- 第一种是用字符串来处理;
- 第二种是直接用数字处理,通过除法和取模运算来获得每一位;
- 第三种是,我们发现要算的数其实是第一个数各个位数的和与第二个数各个位数的和的积;
方法一:
字符串代码:
#include<stdio.h> #include<string.h> using namespace std; int main(){ char a[12],b[12]; while(scanf("%s %s",a,b) != EOF){ int len1 = strlen(a); int len2 = strlen(b); int sum = 0; for(int i=0;i<len1;i++){ for(int j=0;j<len2;j++){ sum += (a[i]-48)*(b[j]-48); } } printf("%d\n",sum); } return 0; }
方法二:
数字方法代码:
#include<cstdio> #include<cstring> int getsize(int n){ //获得一个整数的位数 int count = 0; while(n!=0){ n = n/10; count++; } return count; } int main(){ int a,b; while(scanf("%d %d",&a,&b)!=EOF){ int len1 = getsize(a); int len2 = getsize(b); int sum = 0; for(int i=0;i<len1;i++){ int t=a%10; //取a最末尾的那位数 int k = b; for(int j=0;j<len2;j++){ int p = k%10; sum += t*p; k = k/10; } a = a/10; //舍去a的末尾数 } printf("%d\n",sum); } return 0; }
方法三:
#include<cstdio> #include<cstring> int getsize(int n){ //获得一个整数的位数 int count = 0; while(n!=0){ n = n/10; count++; } return count; } int main(){ int a,b; while(scanf("%d %d",&a,&b)!=EOF){ int len1 = getsize(a); int len2 = getsize(b); int sum1 = 0; int sum2 = 0; for(int i=0;i<len1;i++){ sum1 += a%10; a = a/10; } for(int i=0;i<len2;i++){ sum2 += b%10; b = b/10; } printf("%d\n",sum1*sum2); } return 0; }