我在尝试将整数数组连接成一个数字时遇到了一些麻烦。我知道如何使用单位数字(我的代码如下),但如果我提示用户输入5个数字并输入12,345,552,126,44怎么办。我需要开发一个算法用户输入并连接它以产生一个整数,如1234555212644
#include<stdio.h>
int main(void)
{
int num[3]={1, 2, 3}, n1, n2, new_num;
n1 = num[0] * 100;
n2 = num[1] * 10;
new_num = n1 + n2 + num[2];
printf("%d \n", new_num);
return 0;
}
输出:123
先谢谢。
答案 0 :(得分:1)
@ dreamlax的建议是有意义的,如果你只是试图打印整数,但如果你已经简化了你的问题,实际上你想要实际的整数,你可以用对数来确定一个数字是多少号码有:
int concat(int* arr, size_t len)
{
int result = 0;
for (int i = 0; i < len; i++)
{
int digits = floor(log10(arr[i])) + 1;
result *= pow(10, digits);
result += arr[i];
}
return result;
}
然而,确实,你很快就会耗尽空间来存储这么大的整数。如果您需要存储这么大的整数,您可能需要考虑使用char数组并在循环中使用sprintf
来连接数字,或stringstream
。
答案 1 :(得分:0)
像这样的东西适用于长数字。这里没有错误检查,只是为了说明。
int main(int argc, char **argv)
{
int num[] = {12, 345, 552, 126, 44};
char buf[1000] = ""; // max size of number in digits - 1
char n[10] = ""; // max size of individual number - 1
for (int i = 0; i < sizeof(num)/sizeof(num[0]); i++) {
sprintf(n, "%d", num[i]);
strcat(buf, n);
}
printf("Number: %s\n", buf);
return 0;
}
如果需要,您还可以使用strtoll轻松地将字符串编号分配给一个大整数(例如unsigned long long),并且该函数还会告诉您该数字是否太大而不适合。