题目
题解
char* solve(char* s, char* t ) {
// write code here
int slen = strlen(s), tlen = strlen(t);
int alen = slen + tlen;
int a[alen];
char *ret = (char*)calloc(alen, sizeof(char));
//
for(int i=0; i<alen; i++) {
a[i] = 0;
}
for(int i=0; i<slen; i++)
for(int j=0; j<tlen; j++) {
a[i+j+1] += (s[i]-'0') * (t[j]-'0');
}
for(int i=alen-1; i>0; i--) {
ret[i] = a[i]%10 + '0';
a[i-1] += a[i]/10;
}
ret[0] = a[0] + '0';
//如果答案开头有若干0的操作,同时要保证如果答案是0000,最后输出一个0
while(*ret=='0' && alen>1) {
ret = ret+1;
alen--;
}
// if(*ret == "") ret[0]='0';
return ret;
}
我的代码
char* solve(char* s, char* t ) {
// write code here
int sLen = strlen(s);
int tLen = strlen(t);
int resLen = sLen + tLen;
int sPos = sLen - 1;
int tPos = tLen - 1;
int res = 0;
if(strcmp(s,"0")==0){
return s;
}else if(strcmp(t,"0")==0){
return t;
}else{
char *result = (char *)calloc(resLen, sizeof(char));
for(int i=sPos; i>=0;i--){
int n1 = sPos>= 0 ? s[i]-'0': 0;
for (int j=tPos; j>=0;j--){
int n2 = tPos>= 0 ? t[j]-'0': 0;
res += n1 * n2 * pow(10 ,(tPos - j)) * pow (10, (sPos-i));
}
}
for (int k=0;k<resLen;k++){
int num = (int) res/(pow(10,(resLen-k-1)));
result[k]= num +'0';
if(num!=0){
res -= num * (pow(10,(resLen-k-1)));
}
}
if(result[0]==0){
for (int i=0; i<resLen-1;i++){
result[i]=result[i+1];
}
}
result[resLen]='\0';
return result;
}
}
我的问题
大数乘法和正常的乘法不一样,必须把过程中的所有数拆开计算、储存。
知识点
c语言中如何判断两个字符串相等使用strcmp函数。
strcmp原型:int strcmp( char *s1,char * s2)
功能比较s1和s2的大小。
当s1<s2时,返回为负数
当s1=s2时,返回值= 0
当s1>s2时,返回正数