五进制整数的加减运算

三、设计方法和基本原理
1. 课题功能描述
本程序的功能:由用户输入两个五进制无符号整数,计算得到它们的和、差并输出。
程序运行时,提示用户输入两个五进制整数,如:
Please input number: 34210234
Please input number: 243102
程序计算后,输出运算结果:
34210234+243102=40003341
34210234-243102=33412132
2. 问题的解决方案
注意:问题的解决方案有很多,下面给出的一种仅供同学们参考。
根据问题的描述,使用字符数组来存放输入的两个五进制无符号整数和运算结果,并按字符串进行输入和输出。
为实现程序的功能,可按照下述过程完成程序(仅供参考,可自行设计实现过程及方法):
 输入两个数据到字符数组中
 因输入时数据的高位在下标为0的元素中,所以要对两个字符数组中的字符串求逆序
 调用相加函数求两个数的和,然后输出
 调用相减函数求两个数的差,然后输出
本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
 输入函数:完成一个五进制无符号整数的输入。输入数据到字符数组中,然后检验用户输入的数据是否合法(例五进制数中只能出现0~4),合法则返回,否则继续输入。
 求字符数组中字符串的逆序:因输入时数据的高位在下标为0的元素中,为使运算时从0开始循环,所以要对两个字符数组中的字符串求逆序。
 求两个数据(字符数组中)的和
 求两个数据(字符数组中)的差
我们知道,用户输入的数字4在字符数组中存放的是字符4的ASCII码值51。在运算中要将字符转换成对应的数字,运算后还要将其转换为字符存入字符数组,为此编写两个函数将字符与数字之间的转换作为独立模块,供上面的运算模块调用。例如(仅供参考):
 字符转数字
 数字转字符
主函数中控制函数调用完成输入、计算,并输出计算结果。
四、主要技术问题的描述
1) 单个字符与数字的转换
在字符转数字时,'0'~'4'只需减去'0'即可;同样的,数字转字符时,只需加上'0'。
2) 求两个数据(字符数组中)的和
从低位向高位逐位相加,每位数字相加时,实际是三个数字相加:两个加数的当前位数字和低位向当前位的进位。要将两个加数的数组元素(字符型)转换成相应的数字再相加,相加后转换为字符存入存放和的字符数组中。最后对存放和的字符数组求逆序,使得高位存放在下标为0的元素中。
3) 虽然进行的是两个无符号整数的运算,但相减后可能得到一个负数,考虑如果第1个数小于第2个数时如何得到一个负数差;
五、创新要求
实现程序功能后,可进行创新设计:
1) 使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;
2) 实现两个带符号整数的运算;
3) 求两个五进制无符号整数的乘积(两个因子相乘时,当其中的两个数位相乘时,如a[i]*b[j],对应的乘积的数位应该是i+j)。
4) 本程序实现的是五进制无符号整数的运算,可扩充程序功能,由用户输入数据使用的进制,然后输入两个整数,由程序计算并输出这两个数据的和、差及乘积。

“加法”是少数几项我们从学校中学会的很有实践运用意义的技能。所幸,学习加法一点也不难。并且,针对数字的不同,可以采取不同的技巧。因此,详细的方法如下:

方法1

小数字相加运算

首先熟悉加法的概念。拿出一把小黄豆(或其它小物体)。将一些黄豆放在一边形成一堆,然后从1开始数这一堆黄豆有多少个(从1、2、3数到最后一个黄豆)。数到最后一个黄豆的数字就是这一堆黄豆的总数。在纸上记录黄豆总数的数字。然后再数另一堆有多少个黄豆。

学习“数对”。由于大多数人都习惯以10为单位计数,所以熟记和为10的一对数可以让加法更简单。掌握那些两数和为10的数对。

尽可能地将数字配对组成“数对”。尽可能地将数字和数字配对,使之和为十的倍数。

将额外部分数字相加。凑完整十数之后,再加上余下的数字,用笔算或心算将其相加即可。

仔细检查你的运算结果。只要有时间,你最好每次都用其它方法来复检你的运算结果以保证运算正确。

方法2

大数目相加运算

学习数位的概念。当你书写数字时,每个数字的位置都有其特定的名字或类型。掌握数位的概念可以帮助你正确地排列数字及运算

排列数字。在计算加法运算时,先将数字按位数从多到少来从上向下地排列数字。排列数字是为了让数字的每个相同的数位进行对齐。如果一个数字没有高位数,那么就在其左侧空出一个数位。

将第一列数字相加。从右边开始,将最右侧的一列数字相加。将相加得到的结果写在这一列的下方位置。按照该法将其它列数字相加并写下结果。

向前一个数位进位。如果个位数数字相加得到的结果在十位数上有数字,那么在左侧一栏的顶部写下十位上的数字。

计算下一栏。计算完个位数一栏,我们需要计算左侧十位上数字之和,这也包括进位的数字。然后将计算结果写在中间栏的下方。

方法3

小数的加法运算

将小数进行排列。当一个数字带有小数点时,那么你在计算小数相加时要格外仔细才行。主要的窍门就是根据小数点的位置排列所有数字。数字的小数点对齐,自成一列。

方法4

分数的加法运算

将各个分数的分母化为相同的分母。分母是分数式横线下方的数字。在计算分数相加时,你需要将分母化成相同的数字,然后将分子相加。你可以将分子分母同时乘以(或除以)一个相同的数字来

化简分数。你也许希望简化分数来方便阅读。你可以用分子和分母同时除以其相同的因数来化简分数。在本例中,我们不需要化简。因为它已经是最简形式了。但是如果你得到的是一个像3/6这样的结果,那么你需要将其进行化简。

当我们发现分子分母可以同时除以一个小数字时,我们就可以将分数化简。在本例中,我们用两者都除以3来化简,得到结果1/2。

方法5

加法技巧

凑数计算。如果你只计算几个数字的和,并且这些数字中没有恰巧可以凑成整10数的,那么你可以通过加上或者减去一个数来简化计算。

利用数字的形状。如果你想快速心算,那么分组的方法可能并不适合你。你可以利用数字的形状计算加法,而不是靠数手指。这个方法最适合用于几个数字求和的情况。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-04-23
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int pan(char a[])//判断是否有大于4的数
{int i=strlen(a)-1;
while(i>=0)
if(a[i]>'4')
return 0;
else i--;
return 1;
}

void jia(char a[],char b[],char c[])//将a,b相加,结果存放于c
{int i=strlen(a)-1,j=strlen(b)-1,n=99,t,q;
for(t=i,q=n;t>=0;t--,q-- )
c[q]=a[t];

for(;j>=0;j--,n--)
{c[n]=c[n]+b[j]-'0';
if(c[n]>'4')
{c[n]=c[n]-5;c[n-1]++;}}

}

void jian(char a[],char b[],char c[])//将a,b相减,结果存放于c
{int i=strlen(a)-1,j=strlen(b)-1,n=99,t,q;
for(t=i,q=n;t>=0;t--,q-- )
c[q]=a[t];
for(;j>=0;j--,n--)
if(c[n]-b[j]<0)
{c[n-1]--;c[n]=c[n]+5-b[j]+'0';}
else c[n]=c[n]-b[j]+'0';
if(c[n]<'0')
c[n]='-';
}
int main()
{char a[100],b[100],c[100],d[100];
int i,j,n,sum=0;
for(i=0;i<100;i++)
{c[i]='0';
d[i]='0';}//c,d存放结果
while (1)//判断输入是否正确
{printf("请输入二个五进制数:\n");
scanf("%s",a);
scanf("%s",b);
if(pan(a)&&pan(b))
break;}
jia(a,b,c);//调用加法 //将a,b相加,结果存放于c
for(i=0;;i++)
if(c[i]>'0')
break;
printf("\n%s+%s=",a,b);
for(;i<100;i++)
printf("%c",c[i]);
jian(a,b,d);//调用减法//将a,b相减,结果存放于d
for(i=0;;i++)
if(d[i]!='0')
break;
printf("\n%s-%s=",a,b);
if(i==100)
printf("0");
else
for(;i<100;i++)
printf("%c",d[i]);
system("pause");
}本回答被提问者和网友采纳
第2个回答  2019-01-30
法1:可以先把五进制数换算成十进制数后进行运算,再把结果换算成五进制数
法2:做加法逢5进1,做减法不够退1.
举个例子:32+124
列出算式:
124
+
32
▁▁▁▁
211
4+2=6=5+1=11(进1);2+3+1=6=5+1=11(进1);1+1=2;结果是211
举个减法的例子:211-32
列出算式:
211
-
32
▁▁▁▁
124
个位数不够,退1,11-2=5+1-2=4;十位数不够,退1,10-3=5-3=2
结果是124
这样说应该明白了吧^^
第3个回答  2009-06-17
只有30分?别做梦了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网