xmu:1007.A*B Big Number

来源:互联网 发布:mysql front不能连接到 编辑:程序博客网 时间:2024/06/05 09:48
1007.A*B Big Number
Time Limit: 3000 MS         Memory Limit: 65536 K 
Total Submissions: 3792 (997 users)         Accepted: 1165 (801 users) 
[ My Solution ]

Description

Calculate a*b

Input

Two integer a,b (0<=a,b<=101000)

Output

Output a * b

Sample Input

5 7

Sample Output

35

Source
xmu

#include <stdio.h>#include <string.h>#include <stdlib.h>/*1,将输入转化为char数组;2,char数组转为整型数组;3,整型数组着位相乘。*///将字符串数组转为整型数组int* char2Int(char* a){//printf("%s",a);int aLen=strlen(a);int* ret;ret=(int*)malloc(sizeof(int)*1024);memset(ret,0,1024);int retIndex=0;for(int aIndex=aLen;aIndex!=0;aIndex--){ret[retIndex++]=a[aIndex-1]-'0';//printf("%d",ret[retIndex-1]);}return ret;}int main(){char a[1024],b[1024];int ret[2048]={0};scanf("%s %s",a,b);int aLen = strlen(a);int bLen = strlen(b);//0 判断if( (aLen==1&&a[0]=='0') || (bLen==1&&b[0]=='0') ){printf("0");return 0;}int retSize = aLen+bLen-2;int* aInt;int* bInt;aInt = char2Int(a);bInt = char2Int(b);int e=0;//将两数组着位相乘.for(int i=0;i<aLen;i++){e=0;for(int j=0;j<bLen;j++){int temp = ret[i+j]+aInt[i]*bInt[j]+e;ret[i+j] = temp%10;e = temp/10;}if(e!=0){ret[i+bLen]=e;}}//最后进位处理.if(e!=0){retSize++;ret[retSize]=e;}for(int i=retSize;i>=0;i--){printf("%d",ret[i]);}free(aInt);free(bInt);  return 0;}


0 0
原创粉丝点击