C 把两个整数合并成1?
我是C语言的初学者,我想把两个整数合并成1。参见示例代码C 把两个整数合并成1?,c,integer,C,Integer,我是C语言的初学者,我想把两个整数合并成1。参见示例代码 #include <stdio.h> int main() { int age[4]; int mouse[4]; mouse[0]=50; age[0]=23; age[1]=mouse[0]age[0]; printf("%d",age[1]); return 0; } #包括 int main() { 国际年龄[4]; int鼠标[4]; 鼠标[0]=50;
#include <stdio.h>
int main()
{
int age[4];
int mouse[4];
mouse[0]=50;
age[0]=23;
age[1]=mouse[0]age[0];
printf("%d",age[1]);
return 0;
}
#包括
int main()
{
国际年龄[4];
int鼠标[4];
鼠标[0]=50;
年龄[0]=23岁;
年龄[1]=鼠标[0]年龄[0];
printf(“%d”,年龄[1]);
返回0;
}
正如您所看到的,我在鼠标[0]中有50个,在年龄[0]中有23个,我希望年龄[1]为5023
最简单的方法是什么?这将是一个大代码的一小部分,所以我真的希望它保持简单。请原谅这些愚蠢的变量名
谢谢大家
age[1]=1000*鼠标[0]+年龄[0]
如果您想要一个更通用的解决方案,一个不依赖于鼠标[0]
为两位数的解决方案,您可以定义一个函数来获取位数:
int digits(int num) {
return ceil(log10(num));
}
然后你可以这样组合整数:
age[1] = ((int)pow(10, digits(mouse[0])))*mouse[0] + age[0];
你不能像那样连接整数:你需要通过一些初等数学来实现 将“合并”视为先乘法后加法:
age[1] = mouse[0]*100 + age[0];
以下是它的工作原理:
A = 23
B = 50, B*100 = 5000
23
+ 5000
------
5023
请注意,只有当第二个数字正好有两位数时,此技巧才有效。当第二个数字有
N
位数时,在执行加法之前,需要将第一个数字乘以N
-十的次方。我想你的意思是age[1]=mouse[0]age[0]代码>待年龄[1]=鼠标[0]+年龄[0]代码>
如果您始终可以确定两个数字(例如两位数字)的大小,则只需乘以100,将数字移动到age[1]=鼠标[0]*100+age[0]代码>
如果您不知道确切的数字,那么您可以使用log10计算需要将值移位多少:
age[1]=鼠标[0]*(int)pow(10,(int)log10(age[0]))+age[0]
由于OP正在执行字符串连接,因此转换为文本,连接,然后返回到int
char buf1[64+64];
char buf2[64];
sprintf(buf1, "%d", mouse[0]);
sprintf(buf2, "%d", age[0]);
strcat(buf1, buf2);
age[1] = atoi(buf1);
有许多方法可以将int
转换为文本,sprintf()
是一种简单方便的方法。另外,许多wasy将文本转换为int
。您必须注意-
符号和缓冲区溢出。您似乎对连接两个int的文本表示感兴趣
int mouse = 50;
int age = 23;
char combi[BUFSIZ];/*char array to contain the "combination"*/
/*print two ints together in one c-string*/
snprintf(combi, BUFSIZ, "%d%d", mouse,age);
printf("value = %s\n", combi); /*print as string*/
这会将value=5023
打印到您的终端,在一些解释语言中,可能更容易连接字符串,文本和数字表示会自动转换,但是在C中,这需要非常小心。如果您搜索表达式“将两个整数合并为一个”,您将获得数十个点击率。@OliCharlesworth(或google)是有史以来最差问题标题的候选…“组合整数”…您可能需要使用字符串。愚蠢的算术错误:您有一个额外的零