#include<stdio.h> #include<string.h> char s1[10001],s2[10001]; int a[10001],b[10001],c[10001]; int main(){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s\n%s",s1,s2); int i,j; a[0]=strlen(s1); b[0]=strlen(s2); for(i=1;i<=a[0];i++){ a[i]=s1[a[0]-1]-'0'; } for(i=1;i<=b[0];i++){ b[i]=s2[b[0]-1]-'0'; } for(i=1;i<=a[0];i++){ for(j=1;j<=b[0];j++){ c[i+j-1]+=a[i]*b[j]; } } for(i=1;i<a[0]+b[0];i++){ if(c[i]>=10){ c[i+1]=c[i]/10; c[i]%=10; } } int len=a[0]+b[0]; while(c[len]==0&&len>1){ len--; } for(i=len;i>=1;i--){ printf("%d",c[i]); } return 0; }哪里有问题
时间: 2024-03-31 10:34:49 浏览: 202
C++ 设计的 学生成绩管理系统
这段代码实现了两个字符串的高精度乘法,但是存在以下问题:
1. 在输入字符串 s1 和 s2 时,使用了“%s\n%s”格式化字符串。这样会导致程序在读取第一个字符串时,会将输入缓冲区中的换行符也读取进来,从而导致第二个字符串的读取出现问题。应该使用“%s %s”格式化字符串,去掉换行符。
2. 在将字符串转换为数字时,使用了“s1[a[0]-1]-'0'”这样的写法,但是这样会将字符 '0' - '9' 转换为 0-9 的数字。因此,这里应该使用“s1[a[0]-i]-'0'”这样的写法,从高位到低位将字符串转换为数字。
3. 在乘法运算中,没有考虑到进位的情况。当 c[i] >= 10 时,应该将进位部分加到下一位上。
4. 在输出结果时,没有考虑到结果为 0 的情况。应该特判一下,如果结果为 0,则直接输出 0。
修改后的代码如下:
阅读全文