题目1083:特殊乘法
时间限制:1 秒
内存限制:32 兆
特殊判题:否
-
题目描述:
-
写个算法,对2个小于1000000000的输入,求结果。
特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5
-
输入:
-
两个小于1000000000的数
-
输出:
-
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
-
样例输入:
-
123 45
-
样例输出:
-
54
-
来源:
- 2010年清华大学计算机研究生机试真题
- 方法一:
-
#include <stdio.h> #include <string.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; } /************************************************************** Problem: 1083 User: zpy Language: C++ Result: Accepted Time:0 ms Memory:1020 kb ****************************************************************/
方法二: -
#include <stdio.h> #include <math.h> int main(){ int a,b; //保存两个整数的变量 while(scanf("%d %d",&a,&b)==2){ //输入两个整数 int m=a%10,n=b%10; for(int i=2;i<=9;i++){ int t=pow(10,i-1); m += (a/t)%10; //m为a的各个位的数之和 n += (b/t)%10; //n为b的各个位的数之和 } printf("%d\n",m*n); //输出结果 } return 0; } /************************************************************** Problem: 1083 User: zpy Language: C++ Result: Accepted Time:0 ms Memory:1108 kb ****************************************************************/