jia*_*ake 18 c++ formatting parsing
在C++中,如何将两个整数组合(注意:不添加)成一个大整数?
例如:
int1 = 123;
int2 = 456;
Run Code Online (Sandbox Code Playgroud)
是否有一个函数来取两个数字并将intCombined转换为123456?
编辑:
我不好解释清楚.如果int2为0,则答案应为123,而不是1230.实际上,如果int2超过32位限制,则int1(左侧的数字)将只有一个值.所以当int2为0时,int1为0(或垃圾,我不确定).
sth*_*sth 19
你需要将第一个数乘以10的幂是最小的,大于第二个数:
int combine(int a, int b) {
int times = 1;
while (times <= b)
times *= 10;
return a*times + b;
}
Run Code Online (Sandbox Code Playgroud)
对于每个数字int2,您可以int1乘以10然后添加int2:
// merge(123, 0) => 1230
int merge(int int1, int int2)
{
int int2_copy = int2;
do
{
int1 *= 10;
int2_copy /= 10;
} while (int2_copy);
return int1 + int2;
}
Run Code Online (Sandbox Code Playgroud)
你可以使用log10和摆脱循环ceil.
如果您尝试组合的数字是正整数,则可以使用配对功能.
配对功能从两个创建一个唯一的数字.它也是一种可逆功能.
x,y -> z
z -> x,y
z = (x+y)(x+y+1)/2 + y
Run Code Online (Sandbox Code Playgroud)
然后反过来是:
w = floor((sqrt(8z+1)-1)/2)
t = (w*w + w)/2
y = z - t
x = w - y
Run Code Online (Sandbox Code Playgroud)
注意.以上不是任何特定语言.只是一些数学......
假设两个int都是非负的,并且int1在左边,而int2在右边,你需要弄清楚long int2有多少位数,将int1乘以10多次,然后添加它们.
unsigned int int1 = blah;
unsigned int int2 = blah;
unsigned int temp = int2;
do
{
temp /= 10;
int1 *= 10;
} while (temp >0)
unsigned int newInt = int1 + int2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40332 次 |
| 最近记录: |