题目描述:
写个算法:对2个小于100000000的输入,求结果。
特殊乘法举例:123*45=1*4+1*5+2*4+2*5+3*4+3*5
输入:
两个小于10000000的数
输出:
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
样例输入:
123 45
样例输出:
54
#include<stdio.h>
int main(){
char a[11],b[11];
while(scanf("%s%s",a,b)!=EOF){
int ans=0;
int i,j;
for(i=0;a[i]!=0;i++)
for (j=0;b[j]!=0;j++)
ans+=(a[i]-'0')*(b[j]-'0');
printf("%d\n",ans);
}
return 0;
}
#include<stdio.h>
int main(){
char a[11],b[11];
while(scanf("%s%s",a,b)!=EOF){ //利用字符串将两个数字读入,作为字符串保存在内存中
int ans=0; //累加变量
for(int i=0;a[i]!=0;i++) //遍历a中每一个字符,直到a字符串结尾
for (int j=0;b[j]!=0;j++) //遍历b中每一个字符,直到b中字符串结尾
ans+=(a[i]-'0')*(b[j]-'0'); //计算a,b中每一个字符所代表的的数字两两乘积之和
printf("%d\n",ans); //输出答案
}
return 0;
}
以下程序在Dev C++中可以跑通,但是在Visual Studio中无法跑通(Visual Studio重建一个系统项目皆可以跑通了)。
#include<stdio.h>
int main(){
int a,b; //保存两个整数的变量
while(scanf("%d%d",&a,&b)!=EOF){ //输入两个整数
int buf1[20],buf2[20],size1=0,size2=0; //分别保存从两个数中拆解出来的数位数字,其数量由size1,size2表示
while(a!=0){ //数位拆解,只要当a依然大于零就不断重复拆解过程
buf1[size1++]=a%10; //取得当前个位上的数字,将其保存
a/=10; //将所有数位上的数字移动到高一位上
}
while(b!=0){ //拆解第二个数字
buf2[size2++]=b%10;
b/=10;
}
int ans=0; //计算答案
for(int i=0;i<size1;i++)
for (int j=0;j<size2;j++)
ans+=buf1[i]*buf2[j]; //两两想乘后相加
printf("%d\n",ans);
}
return 0;
}