#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]-i]-'0'; } for(i=1;i<=b[0];i++){ b[i]=s2[b[0]-i]-'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 20:34:42 浏览: 187
这段代码实现了两个字符串的高精度乘法,但是存在以下问题:
1. 在输入字符串 s1 和 s2 时,使用了“%s\n%s”格式化字符串。这样会导致程序在读取第一个字符串时,会将输入缓冲区中的换行符也读取进来,从而导致第二个字符串的读取出现问题。应该使用“%s %s”格式化字符串,去掉换行符。
2. 在将字符串转换为数字时,使用了“s1[a[0]-i]-'0'”这样的写法,但是这样会将字符 '0' - '9' 转换为 0-9 的数字。因此,这里应该使用“s1[a[0]-i+1]-'0'”这样的写法,从高位到低位将字符串转换为数字。
3. 在乘法运算中,没有考虑到进位的情况。当 c[i] >= 10 时,应该将进位部分加到下一位上。
4. 在输出结果时,没有考虑到结果为 0 的情况。应该特判一下,如果结果为 0,则直接输出 0。
修改后的代码如下:
相关问题
阅读程序,输出结果: #include <stdio.h> #include <string.h> int main() { char s1[]="Hello World"; char s2[80]; strcpy(s2, s1); puts(s2); return 0; }
这个程序的输出结果是:
Hello World
这个程序定义了两个字符数组 `s1` 和 `s2`。`s1` 数组被初始化为字符串 "Hello World",`s2` 数组没有被初始化,所以其内容是不确定的。然后程序调用了 `strcpy()` 函数将 `s1` 数组中的字符串拷贝到 `s2` 数组中。最后程序调用了 `puts()` 函数将 `s2` 数组中的字符串输出到终端上。由于 `s2` 数组中的内容是从 `s1` 数组中拷贝过来的,因此最终程序输出 "Hello World"。
#include <stdio.h> #include <string.h> void fun(char *w,int n) { char t,*s1,*s2; sl=w;s2=w+n-1 while(s]<s2) {t=*sl++:*s1=*s2- *s2=t; int main() { char a[10]="1234567"; char *p=a; fun(p,strlen(P)); puts(p); return 0;
这是一段 C 语言的代码。该代码定义了一个函数 `fun`,该函数的作用是将字符串翻转。具体来说,该函数的输入参数为一个字符串指针 `w` 和字符串的长度 `n`,函数会将字符串中的字符顺序翻转。该函数内部定义了三个变量,分别是字符变量 `t` 和字符指针变量 `s1` 和 `s2`。接着是一个 while 循环,该循环的条件是 `s1 < s2`,循环内部将 `s1` 和 `s2` 所指向的字符交换,直到 `s1` 和 `s2` 相遇。最后,该代码定义了一个 `main` 函数,该函数声明了一个字符串数组 `a` 并初始化,然后调用 `fun` 函数翻转字符串,并输出翻转后的结果。
需要注意的是,该代码有一些语法错误。第一处是在 `fun` 函数内部,`sl` 变量应该是 `s1`;第二处是在 `while` 循环内部,应该使用 `++s1` 和 `--s2` 分别使 `s1` 和 `s2` 指向下一个字符。此外,`main` 函数中的 `strlen(P)` 应该是 `strlen(p)`。修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
void fun(char *w, int n) {
char t, *s1, *s2;
s1 = w;
s2 = w + n - 1;
while (s1 < s2) {
t = *s1;
*s1 = *s2;
*s2 = t;
++s1;
--s2;
}
}
int main() {
char a[10] = "1234567";
char *p = a;
fun(p, strlen(p));
puts(p);
return 0;
}
```
该程序的输出结果为 `7654321`,即将原字符串 `1234567` 翻转后的结果。
阅读全文