POJ1503

POJ原址:POJ1503

疯掉了,谁知道我在提交n次都失败之后终于Accepted的时候心中的坑爹之感有多么强烈……

(画外音:编辑页面刷了n遍才全部打开,CSDN你闹哪样)

参考链接:

POJ 1503 Integer Inquiry - 路漫漫其修远兮,吾将上下而求索

其实这个链接并没有参考它的程序,但是若不是它的解释启发了我,估计就只有在Wrang Answer和Runtime Error中不断死掉了,太感谢。

POJ1503-Integer Inquiry - ζёСяêτ - 小優YoU

主要参考链接,虽然复制到DEV-C中根本编译都不通过,但是还是参考了不少。


留了一堆错误版本,回过头来看没必要都发上来了,呵呵…呵呵…

这个程序历时五天,当然期间去恩施玩儿了一趟,可是纯投入也在两天左右,还是非常艰辛的呀。


值得一提的points:

1.开始试图把算本位和算进位都用函数,后来发现简直多此一举

2.Addend[length]={'\0'};这种用法从此抛弃。改为memset(Addend,'0',sizeof(Addend));初始化

3.电脑当机一次,所有注释都丢了 ,告诉了我,临时txt也是需要时时保存的。

4.还想着把一个max位单独来算,现在想想,错得真远……

这时候有提交一次,WA,用如图数据测算发现了问题:

5.“修改后囊括最高位,按正常步骤来算,不再区分 ”,但是殊不知离真相还远着呢,提交后Runtime Error,事实上都不是王道呀。

6.终极BOSS:长度103的数组。



程序:

#include<iostream>
#include<cstring>
using namespace std;

void Invert(char a[])
{
	int i,j,length,k;
	char b[103];
	memset(b,'0',sizeof(b)); 
	length=strlen(a);
	for(k=0,j=length-1;j>=0;j--,k++)
	b[k]=a[j];
	strcpy(a,b);
	
}//反序数组结果是原数组反序并且后面全部加上字符'0' 

int main()
{
	int length,n,i,max=0;
	char Addend[103],carry_bit[103],standard_bit[103];
	memset(Addend,'0',sizeof(Addend)); 
	memset(standard_bit,'0',sizeof(standard_bit)); 
	memset(carry_bit,'0',sizeof(carry_bit)); 
	
	cin>>Addend;
	
	length=strlen(Addend);
	Invert(Addend);
	while(Addend[0]!='0'||length!=1)//在第一个数为0且数组长度为1时跳出循环,当然了,大神是这么做的while(strcmp(digit,"0"))
	{
		n=(int)(standard_bit[0]+Addend[0]-'0'-'0');
		standard_bit[0]=n%10+'0';
		carry_bit[0]=n/10+'0';
		
		if(max<length)//为了让长度小于最长的,成为最长的长度来算 
        	max=length;
        	
		for(i=1;i<103;i++)
		{
			n=(int)(standard_bit[i]+Addend[i]+carry_bit[i-1]-'0'-'0'-'0'); //n是本位的simple_add 
    		standard_bit[i]=n%10+'0';//本位 
			carry_bit[i]=n/10+'0';//第i位的进位
		}
		
		cin>>Addend;
		length=strlen(Addend);
		Invert(Addend);
	}
	
	for(i=max;i<103;i++)
	if(standard_bit[i]=='0')
	{
		max=i;//刷新max,代表结果的最高位
		standard_bit[max]='\0';
		break;
	}
	
	Invert(standard_bit);
	standard_bit[max]='\0';
	cout<<standard_bit<<endl;
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值