|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 肚子饿了233 于 2021-1-14 20:45 编辑
#include<stdio.h>
#include<string.h>
void add(char p1[],char p2[],char p3[],int n);
main()
{
char p1[80]="100000000090",p2[80]="2000000000010",p3[80];
int i,x=strlen(p1),y=strlen(p2);
if(x<y)
{
for(i=x;i>=0;i--)
{
p1[i+y-x]=p1[i];
p1[i]='0';
}
x=y;
}
if(x>y)
{
for(i=y;i>=0;i--)
{
p2[i+x-y]=p2[i];
p2[i]='0';
}
}
add(p1,p2,p3,x);
puts(p3);
}
void add(char p1[],char p2[],char p3[],int n)
{
int k=0,i;
p3[n]='\0';
for(i=n-1;i>=0;i--)
{
p3[i]=(p1[i]+'0')+(p2[i]+'0')+k; // 为毛是p1[i]-'0',p2[i]-'0'才对?为啥换成减号才ok呢?
k=p3[i]/10;
p3[i]=p3[i]%10+'0';
}
if(k)
{
for(i=n+1;i>0;i--)
p3[i]=p3[i-1];
p3[i]=k+'0' ;
}
}
程序要求两数相加。
编译器显示出了这个鬼 :*'0////////00 ??
请各位大佬走过路过帮俺瞧瞧,5555
本帖最后由 风过无痕1989 于 2021-1-15 15:04 编辑
- #include<stdio.h>
- #include<string.h>
- void add(char p1[], char p2[], char p3[], int n);
- main()
- {
- char p1[80] = "100000000090", p2[80] = "2000000000010", p3[80];
- int i, x = strlen(p1), y = strlen(p2);
- if (x<y)
- {
- for (i = x;i >= 0;i--)
- {
- p1[i + y - x] = p1[i];
- p1[i] = '0';
- }
- x = y;
- }
- if (x>y)
- {
- for (i = y;i >= 0;i--)
- {
- p2[i + x - y] = p2[i];
- p2[i] = '0';
- }
- }
- add(p1, p2, p3, x);
- puts(p3);
- }
- void add(char p1[], char p2[], char p3[], int n)
- {
- int k = 0, i;
- p3[n] = '\0';
- for (i = n - 1;i >= 0;i--)
- {
- p3[i] = (p1[i] - '0') + (p2[i] - '0') + k; // 若用加法,则 p1[i] + p2[i] 有可能超出字符型数字的定义而出错,所以应该用减法,暂时将字符型数字的运算转换为整型数字的运算
- k = p3[i] / 10; // 两数相加,若大于 10,就会有进位
- p3[i] = p3[i] % 10 + '0'; // 整型数字运算完成后,再转换为字符型数字存入 p3 数组
- }
- if (k) // 若首位有进位(k != 0),则通过循环,将所有数字后移一位
- {
- for (i = n + 1;i>0;i--)
- p3[i] = p3[i - 1];
- p3[i] = k + '0';
- }
- }
复制代码
|
|