九度OJ题目1083:特殊乘法

题目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 
****************************************************************/  

                            
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章