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;

我是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;
年龄[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)是有史以来最差问题标题的候选…“组合整数”…您可能需要使用字符串。愚蠢的算术错误:您有一个额外的零