九度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 
****************************************************************/  

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