正弦


私信TA

用户名:qq15582632151

访问量:32285

签 名:

等  级
排  名 145
经  验 7353
参赛次数 0
文章发表 57
年  龄 0
在职情况 学生
学  校 小学生
专  业

  自我简介:

解题思路:用字符数组储存两个加数,从个位开始,进行相加,结果存放另一个数组里,(顺便考虑是否进位)

        

注意事项:  在下的方法  要注意 每次输入数据时,要进行清空数组和进位标志count赋值0;
          
           要考虑两个加数长度是否相等,以及最高位是否进位

参考代码:
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[1100], str2[1100];                          //定义两个字符串,表示两个加数
	int i, L1, L2, count = 0,num[1100] = { 0 };
	while (scanf("%s %s", str1, str2) != EOF)               //输入两个字符串
	{
		count = 0;                                     //count表示进位,每次输入赋值为0
		memset(num, 0, sizeof(num));               // 数组num 代表 和 的即结果,每次清空数组
		L1 = strlen(str1);                           //L1表示第一个加数的长度
		L2 = strlen(str2);                            //L2表示第二个加数的长度
		for (i = 1005; L1 > 0 || L2 > 0; i--)          //为了防止加数 位数过多,i从1005开始
		{
			if (L1 > 0 && L2 > 0)                  //当相同位 上都有数字时,进行相加
			{
				num[i] = str1[L1 - 1] + str2[L2 - 1] + count - 2 * '0';
				L1--;
				L2--;
			}
			else                                //当某一个数字的已经计算到最高位时,进行赋值
			{
				if (L1 > 0 && !L2)           //当第二个数字已经计算到最高位时
				{
					num[i] = str1[L1 - 1] + count - '0';
					L1--;
				}
				else if (!L1&&L2 > 0)          //当第一个数字已经计算到最高位时
				{
					num[i] = str2[L2 - 1] + count - '0';
					L2--;
				}
			}
			if (num[i] > 9)                   //当前位的和 超过10 ,进位!
			{
				num[i] -= 10;
				count = 1;
			}
			else                           //当前位的和 不超过10 , 不进位!
				count = 0;

		}

		if (count == 1)                      //这一步的if else 语句, 是为了计算 :
		{                                    // 如果两个加数长度相等,最高位是否进位
			num[i] = 1;
			for (; i <= 1005; i++)
				printf("%d", num[i]);       //输出结果
		}
		else                                
		{
			for (i++; i <= 1005; i++)         //如果两个加数长度不等,或者长度相等最高位不存在进位
				printf("%d", num[i]);         //   输出结果
		}
		printf("\n");
	}
	return 0;

}


 

0.0分

3 人评分

  评论区

欢迎大神指教 ~不要吝啬小心心
2018-07-29 18:17:28
  • «
  • 1
  • »