寒假作业2:解题思路

解题思路

Github的链接(https://github.com/MercuialC/object-oriented)

题意理解:

让我来翻一下题目。题目说输入两个数,然后将他们的和用一种规定的格式输出。这种格式也很常见,(取钱的时候见过吧)。(嗯,还是一道很平易近人的题目)

解题的经历:

做这道题,我换了两种思路,(嗯,很明显,第一条我认为比较规范的道路我没走通)
先说说两种思路吧

  1. 我的第一种思路:先输入两个数然后设个字符型数组,嗯,求和完将这个和的每一个数字分别存入这个数组中的一个元素中,但是每三个就加一个逗号。
    代码如下:
int main()
{
	int a,b,sum,i,j,d=1000000,e=1,f=0;
	char c[20]={0};
	scanf("%d%d",&a,&b);
	sum=a+b;
	for(;;)
	{
			d=(d/(e));
			if(d==0)
			{
				break;
			 } 
			e=e*10;
			j=(sum/(d));
			 if(j!=0)
			{

				sum=(sum-j*(d));
				for(;;)
				{
					d=(d/(e));
					if(d==0)
					{
						break;
					 } 
					e=e*10;
					j=(sum/(d));
					if(f%3==0&&f!=0)
					{
						c[f]=',';
						f=f+1;
					}
					c[f]=j;
					f=f+1;
					sum=(sum-j*(d));
				}	
			}	
	}
	for(i=0;i<f-1;i++)
{
		printf("%c",c[i]);
}
	return 0;
}

排错时通过不断地输出来检验有没有执行哪一条语句,然后判断前一过程的值有没有问题。
排错图片

嗯,然后我发现写错了,首先是我发现,我的思路都不能实现,输出会出现奇怪的字符。
然后我就发现我想错了

嗯,举个栗子。eg:输入10000 和1。设了c[]这个数组。然后和为10001就c[0]=1,c[1]=0,c[2]=0,c[3]=',',c[4]=0,c[5]=1。(没错,就是这样)
2. 然后我就生气了(2333)我决定用愚蠢实用的方法快速解决它
第二种思路简单粗暴(。。)嗯,我的思路是这样的:首先,a与b有最大值的限制(多好啊)所以他们的和最高(max)有2后面6个0,最低(min)有负2后面6个0!
然后就好像很简单的样子,分情况讨论讨论,如果它大于4位数小于7位数用和来除1000得到的数就是逗号前的,(逗号后有3个0),嗯,然后再分具体几位数来看看到底要补全几个0.然后如果小于4位或等于7位再具体讨论一下(if语句是万能的)
具体代码如下:

int main()
{
	int a,b,i,j,k,l,sum;
	scanf("%d%d",&a,&b);
	sum=a+b;
	if(sum<1000&&sum>=0)
	{
		printf("%d",sum);
	}
	else if(sum>=1000)
	{
		i=sum/1000;
		j=sum-i*1000;
		if(i<1000&&i>=100)
		{
		printf("%03d,%03d",i,j);
		}
		else if(i>=10&&i<100)
		{
		printf("%02d,%03d",i,j);
		}
		else if(i>=1000)
		{
			k=i/1000;
			l=i-k*1000;
			printf("%d,%03d,%03d",k,l,j);
		}
		else
		{
		printf("%d,%03d",i,j);
		}
	}
	else if(sum<0)
	{
		if(sum>-1000)
	{
		printf("%d",sum);
	}
	else if(sum<=-1000)
	{
		i=sum/(-1000);
		j=sum*(-1)-i*(1000);
		if(i<1000&&i>=100)
		{
		printf("-%03d,%03d",i,j);
		}
		else if(i>=10&&i<100)
		{
		printf("-%02d,%03d",i,j);
		}
		else if(i>=1000)
		{
			k=i/1000;
			l=i-k*1000;
			printf("-%d,%03d,%03d",k,l,j);
		}
		else
		{
		printf("-%d,%03d",i,j);
		}
	}
	}
	return 0;
}

在调试的途中发现了一些问题,(就是讨论情况中的遗漏,毕竟方法比较笨)一个是一开始默认和也是>=-1000000&&<=1000000;然后比较暴力的处理了七位数的情况。后来发现了这一问题(因为网络当时没有所以修改过程没有截屏)。

总结

嗯,通过第二个思路,总结一种不断除整然后相减取某一位数的常见方式,也发现简单的思路有时候也很重要,然后第一个思路也会去想想完善完善的。附上提交记录

(啊哈哈,第一次,失误失误)

原文地址:https://www.cnblogs.com/mercuialC/p/6354414.html