a + b, a -b问题,帮忙找错嗯我

哎木闹特you 2018-04-05 12:59:37
#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<stdio.h>
#include<string.h>
void sub(char stra[102], char strb[102])
{
int a[110], b[110],op;
int length_a, length_b;
op = strcmp(stra, strb);
if (op == 0)
{
printf("0");
}
else
{

length_a = strlen(stra) - 1;
length_b = strlen(strb) - 1;
for (int i = 0; i < 110; i++)
{
a[i] = 0;
}
for (int i = 0; i < 110; i++)
{
b[i] = 0;
}
for (int i = length_a, j = 1; i >= 0; i--, j++)
{
a[110 - j] = stra[i] - '0';
}
for (int j = length_b, i = 1; j >= 0; j--, i++)
{
b[110 - i] = strb[j] - '0';
}

if (length_a > length_b)
{
for (int i = 109; i >= 0; i--)
{
if (a[i] >= b[i])
{
a[i] = a[i] - b[i];
}
else
{
a[i] = (10 - b[i]) + a[i];
a[i - 1] = a[i - 1] - 1;
}

}
int num = 0;
while (a[num] == 0)
{
num++;
}
for (int i = num; i < 110; i++)
{
printf("%d", a[i]);
}

}

else if (length_a < length_b)
{
for (int i = 109; i >= 1; i--)
{
if (b[i] >= a[i])
{
b[i] = b[i] - a[i];
}
else
{
b[i] = (10 - a[i]) + b[i];
b[i - 1] = b[i - 1] - 1;
}

}
printf("-");
int num = 0;
while (b[num] == 0)
{
num++;
}
for (int i = num; i < 110; i++)
{
printf("%d", b[i]);
}
}
else
{
if (op == 1)
{
for (int i = 109; i >= 1; i--)
{
if (a[i] >= b[i])
{
a[i] = a[i] - b[i];
}
else
{
a[i] = a[i] - b[i] + 10;
a[i - 1] = a[i - 1] - 1;
}
}
int num = 0;
while (a[num] == 0 && num<=109)
{
num++;
}
if (num == 110)
{
printf("0");
}
else
{
for (int i = num; i < 110; i++)
{
printf("%d", a[i]);
}
}
}
else
{
for (int i = 109; i >= 0; i--)
{
if (b[i] >= a[i])
{
b[i] = b[i] - a[i];
}
else
{
b[i] = b[i] - a[i] + 10;
b[i - 1] = b[i - 1] - 1;
}
}
int num = 0;
while (b[num] == 0 && num<109)
{
num++;
}
printf("-");
for (int i = num; i < 110; i++)
{
printf("%d", b[i]);
}
}
}
}

}
void add(char a[1000],char b[1000])
{
int int_a[1001], int_b[1001], legnth_a, legnth_b;
int_a[0] = 0;
int_b[0] = 0;
legnth_a = strlen(a);
legnth_b = strlen(b);
int m = 0;
for (int s = 1, j = 0; j < legnth_a; j++, s++)
{
int_a[s] = a[j] - '0';
if (int_a[s] == 0)
{
m = m + 1;
}
else
continue;
}
int n = 0;
for (int s = 1, j = 0; j < legnth_b; j++, s++)
{
int_b[s] = b[j] - '0';
if (int_b[s] == 0)
{
n = n + 1;
}
else
continue;
}
if (m == legnth_a && n == legnth_b)
{
printf("0");
}
else
{
if (legnth_a > legnth_b)
{
for (int j = legnth_b, s = legnth_a; j >= 1; j--, s--)
{
int_a[s] = int_a[s] + int_b[j];
if (int_a[s] >= 10)
{
int_a[s] = int_a[s] - 10;
int_a[s - 1] += 1;
}
else
{
continue;
}
}
int x;
for (int j = 0; j <= legnth_a; j++)
{
if (int_a[j] == 0)
{
continue;
}
else
{
x = j;
break;
}
}
for (x; x <= legnth_a; x++)
{
printf("%d",int_a[x]);
}

}
else
{
for (int j = legnth_a, s = legnth_b; j >= 1; j--, s--)
{
int_b[s] = int_b[s] + int_a[j];
if (int_b[s] >= 10)
{
int_b[s] = int_b[s] - 10;
int_b[s - 1] += 1;
}
else
{
continue;
}
}
int y;
for (int j = 0; j <= legnth_b; j++)
{
if (int_b[j] == 0)
{
continue;
}
else
{
y = j;
break;
}
}
for (y; y <= legnth_b; y++)
{
printf("%d",int_b[y]);
}
}

}
}
int main()
{
char str1[101], str2[101], ty;
int jk;
scanf("%d",&jk);
getchar();
for (int i = 0; i < jk; i++)
{

scanf("%s %c %s",str1, &ty,str2);
if (ty == '-')
{
sub(str1,str2);
printf("\n");
}
else
{
add(str1,str2);
printf("\n");
}
}
system("pause");

}
...全文
228 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcjlg2010n 2018-04-06
  • 打赏
  • 举报
回复
代码是可分段实现局部功能的。你这样一大段代码贴出来,估计没人有多少耐心去看。应该是找出有疑惑的段落来,略去没有疑惑的段落
哎木闹特you 2018-04-05
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
引用 1 楼 zhao4zhong1 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
你的建议非常好,单是对于我一个初学者来说,还欠缺错误分析能力,我只知道,正确答案程序,我找到了错误,我的程序,我实在是找不到错误,但是就是不对
paschen 版主 2018-04-05
  • 打赏
  • 举报
回复
单步跟踪程序运行,观察变量变化情况,看是哪一步与你期望的不一致,分析原因
赵4老师 2018-04-05
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧