c语言怎么将两个正整数连接

供稿:hz-xin.com     日期:2025-01-13
C语言, 写一个函数,将两个正整数n1, n2连成一个新的整数m。

两种方法可以做
一个是常规的 根据位数,循环取后一个最高位的值,然后前一个乘十加上去。代码很麻烦
一个是借用字符串。代码如下
#include int main(){ int n1,n2,m; char s[100]; scanf("%d%d",&n1,&n2); sprintf(s,"%d%d",n1,n2); sscanf(s,"%d",&m); printf("%d
",m); return 0;}四句代码搞定。

首先假设合并函数的功能:将两个两位数的整数 a、b 合并成一个整数放在 c 中。合并的方式是:将 a 的十位和个位数依次放在 c 数千位和十位上,b 数的十位和个位数依次放在 c 数的个位和百位上。
实现方法如下:

  有二个方法可以实现:

  方法一:直接用strcat函数 ;

  方法二:编程实现strcat的功能 ;

  参考代码如下:

void main() 
{ char s1[80],s2[80]; 
int i=0,j=0; 
puts("input two strings:"); 
gets(s1); 
gets(s2); 
while(s1[i]!='\0') i++; 
while(s2[j])!='\0')

s1[i++]=s2[j++];*/此处本人修改*/
printf("result:%s
",s1); 
}


简单的方法就是使用 itoa转换成字符数组,然后使用strcat这个函数进行连接处理。

如果1和2是数字 要变成12 1*10+2即可
如果是字符 那么就是 (1-'0')*10+(2-'0')

用字符串存数,在直接输出就OK。
关键就在于把整型转化为字符型。
可以用取模的方法,比如要个位上的数 用这个数模10(%10),要十位上的数,先把这个数/10(除10),把新的数继续模10(%10),在把这个数/10(除10)。。。。。直到这个数等于0;
把整型化为字符串简化代码:
char num1[1000],num2[1000] //设有最大有999位的整数,你也可以自己选择,多大都可以。

Int i=0,a,length,j;
scanf("%d",&a);
while(a!=0)
{
num[i++]=a%10;
a/=10;
} //执行完后得到的字符串与实际整型正好倒过来了,比如整型位12,num里面是12.你可以模拟一下.

length=i; //字符串长度,也就是这个整数的位数。
for(i=length-1,j=0;i>=0;i--,j++) //length-1 为最后一位数的下标。
num2[j]=num1[i]; //执行完后num2就是12 这个字符串了。

下面是用GCC编译器编译通过的一个程序,希望能帮到你

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdint.h>
/* 定义全局的溢出标记 */
static int g_OverflowFlg = 0;
/* 判断数字的位数,0也算一位 */
int number_length(uint32_t num)
{
int length = 0;
if(num > 0)
{
while(num > 0)
{
num /= 10;
length++;
}
}
else
{
length = 1;
}
return length;
}
/*
* @fn: intcat
* @bref: 连接两个整数,并返回连接后的新整数值
* @param:
* dst 目标数, src 源数,此处的意思为:比如 src = 2, dst = 5
* 最后的结果是 52
* @return: 连接后的值,越界后返回0
*/
uint32_t intcat(uint32_t dst, uint32_t src)
{
int lengthOfSrc, lengthOfDst;
uint32_t tmp = 0;
lengthOfSrc = number_length(src);
lengthOfDst = dst>0?number_length(dst):0;
/* 在这里考虑越界的问题 */
if(lengthOfDst + lengthOfSrc < 11) /* 2^32-1 为10位 */
{
tmp = dst * (uint32_t)pow(10, lengthOfSrc)+ src;
printf("%lu\t", tmp);
if(number_length(tmp) < lengthOfDst + lengthOfSrc) /* 越界 */
{
g_OverflowFlg = 1;
tmp = 0;
}
else
{
g_OverflowFlg = 0;
}
}
else
{
g_OverflowFlg = 1;
}
return tmp;
}
int main(int argc, char* argv[])
{
uint32_t a = 0xFFFFFFFFUL;
uint32_t b = 2;
uint32_t result = 0UL;
result = intcat(a, b);
if(!g_OverflowFlg)
{
printf("%lu\n", result);
}
else
{
printf("Overflow exists!\n");
}
return 0;
}

c语言问题 输入a、b两个两位正整数,将它们合并形成一个新的整数...
c=(a\/10)*100+(a%10)+(b\/10)*10+(b%10)*1000 后面没有;

如何用计算机C语言编程:输入两个正整数,输出它们的最小公约数和最大公 ...
include int main(){ int m,n;int m_cup,n_cup,res;\/*被除数,除数,余数*\/ printf("Enter two integer:\\n");scanf("%d d",&m,&n);if (m > 0 && n >0){ m_cup = m;n_cup = n;res = m_cup n_cup;while (res != 0){ m_cup = n_cup;n_cup = res;res = m_...

如何用c语言编程输入一个两位正整数,让其以字符形式输出
include <stdio.h> int main(){ int k;scanf("&d",k);if(k>99 || k<10){ printf("输入不符合要求");return 0;} int d = k \/10; \/\/十位数 int i = k - d*10; \/\/ 个位数 printf("十位字符:%c\\n",d);printf("个位字符:%c\\n",i);getchar();return 0;} ...

输入两个正整数m和n,求和,差,积,商,余数,C语言设计。
printf("和=%d\\n",m+n); printf("差=%d\\n",m-n); printf("积=%d\\n",m*n); printf("商=%.2f\\n",(float)1.0*m\/n); \/\/ int 是整数,float语句是将int转换成float型 \/\/ m\/n的俩个整的商,仍是整数,值是将小数点后所有都省去的整数,如3\/2=1,但是用1.0*之后,...

讲解,C语言 输入2个整数,求两数的平方和并输出。
程序及注释如下:include <stdio.h> int main(){ int a,b,c; \/*定义三个整型变量*\/ printf("请输入两个整数:\\n"); \/*输出提示信息*\/ scanf("%d%d",&a,&b); \/*从键盘接收两个整数值*\/ c=a*a+b*b; \/*计算两数平方和并赋值给c*\/ printf("两数的平方和为:%d\\n...

c语言 求编一个程序输入两个正整数。求他们之间的所有整数中0,1,2...
int m,n,k,i,l;int f,a[10][2];for(i=0;i<10;i++){a[i][0]=i;a[i][1]=0;}\/*初始化数组*\/ scanf("%d%d",&n,&m);if(n>m){k=m;m=n;n=k;};\/*保证n<m*\/ while(n<=m){ l=n++;while(l!=0){ switch(l%10){ \/*一个数中统计数码的个数*\/ case 0...

c语言编程:输入两个正整数,求最大公约数和最小公倍数
include<stdio.h> int main(){ int p,r,n,m,temp;printf("请输入两个正整数n,m:");scanf("%d,%d,",&n,&m);if(n<m){ temp=n;n=m;m=temp;} p=n*m;while(m!=0){ r=n%m;n=m;m=r;} printf("它们的最大公约数为:%d\\n",n);printf("它们的最小公约数为:%d\\n",p\/...

C语言:从键盘输出两个正整数m和n(m<=n<=999)
void f(int m,int n){ int i;x,v,flag,count=0;for(i=m;i<=n;i++){ flag=0;x=i;while(x){ v=x%10;if(v==5){ flag=1;break;} x=x\/10;} if(i%3==0&&flag){ if(!count) printf("\\n");printf("%d\\t",i);count=++count%3;;} } } ...

c语言编程,输入两个正整数,输出其最大公约数和最小公倍数,for循环完成...
include<stdio.h>main(){ int m,n,i,m1,n1; while(1){ scanf("%d%d",&m,&n); m1=m;n1=n;i=m1%n1; for(;i!=0;){ m1=n1; n1=i; i=m1%n1; } printf("最大公约数 = %d\\n",n1); printf("最小公倍数 = %d\\n",m*n\/n1);}}如图...

用C语言编写一个程序,从键盘输入两个正整数,输出这两个整数的最小公倍...
用欧几里德算法,最经典的了 include <stdio.h> include <stdlib.h> main(){ int p0,q0;printf("输入两个正整数:");scanf("%d%d",&p0,&q0);int p=min(p0,q0),q=max(p0,q0);\/\/min(),max()自己写吧 int r=p;while(p%q!=0)p+=r;printf("最小公倍数为:%d",p);} ...