来自@和谐小小 ,我就说自己实现感觉太粗糙。
……大数运算早有标准解法和各种库的,像是java和.net库里都带了大数的数据类型,C++也有大量第三方库,用不着自己粗糙实现。标准的实现方法是一个int数组,每一个int存放大数的32bit,这样就是无限bit的数了。
后来我又想了想,用的话就是直接用,大概实现就是我那么个实现,不过确实像原答案那样实在是浪费内存空间,按照和谐小小的说法确实是合理的多的。
刚才又看了下java下的biginteger包,发现还应该把变量合并,合并成想小小说的数组,这样的话在调用的时候函数就只用输入两个形参,要方便很多。
我吸收知识的地址:http://blog.csdn.net/qq_23191031/article/details/50606577
以下是原答案:
--------------------------------------------------------------------------------------------------------------------------------
参考假面龙骑士龙骑士无面者(卧槽我是怎么看错的···)的答案,我想了想,想了一个比较粗糙的解决方法。
以C语言为例:
把数字分段,每四位数字用一个变量存储,如123456789000这个12位的数字(我就不举太长的了,反正就是这个思路),1234,5678,9000三个数字,运算时采取正常运算+满进一的方法(加减法好处理,不过乘除法也不难,以整个数字*3为例,由于每个变量实际存储的大小远小于能存储的最大值,直接*3,然后用结果数对整除10000,再将得数与高位变量数值相加),在输出时用‘itoa()’函数,得到“1234”,“5678”,“9000”三个字符串,再用strcat()函数输出即可。
简单的写下:
void Print_Big_Long(int a,int b,int c) //用来转化为字符串+输出
{ //可以根据需要调整为返回指针
printf(%s,strcat(strcat(itoa(a),itoa(b)),itoa(c)));
}
int *add(int a,int b,int c,int add) //做加法的函数(粗糙版)
{
c+=add%pow(10,4);
b+=add%pow(10,8)/pow(10,4);
a+=add/pow(10,8);
if(c>9999)b+=c/pow(10,4),c=c%pow(10,4); //超范围时向高位增加
if(b>9999)a+=b/pow(10,4),b=b%pow(10,4);
//我没写a超范围怎么办,理论上来说需要添加一个增加变量的函数,但是我懒得写了
}
同理减法。乘法如果有之前有提到,不过一般放置挂机类不会出乘法吧?(原谅我没玩过这种游戏),除法的话要更麻烦一些,需要把除数分段,然后优先除高位,若商取余大于0即是可以除,不过考虑到游戏类型,应该也是不使用的,就不详细说了,要是这种游戏是有这个需要的就私信我。
和谐小小 1年前
发布
淡观天下 [作者] 1年前
发布