gpt4 book ai didi

c - 将整数拆分为两个独立的整数

转载 作者:太空狗 更新时间:2023-10-29 16:59:05 25 4
gpt4 key购买 nike

假设我有

int n=123456;
int x,y=0;

如何将整数“n”一分为二。

注意:n 中的总位数始终是 2 的倍数,例如 1234、4567、234567、345621 等...都有 2,4 ,6,8 位数字。我想把它们分成两半。

我正在尝试使用以下代码,但它不起作用,y 变量以某种方式保留了反转的第二部分。

int x, y=0, len, digit;
int n=123456;

len=floor(log10(abs(n))) + 1;
x=n;
while((floor(log10(abs(x))) + 1)>len/2)
{
digit=x%10;
x=x/10;
y=(y*10)+digit;
}
printf("First Half = %d",x);
printf("\nSecond Half = %d",y);

当输入是:

n=123456;

我得到的输出:

First Half = 123
Second Half = 654

我想要的输出:

First Half : 123

Second Half : 456

最佳答案

这是一个演示程序。它不使用除 printf 之外的任何函数。:) 因此它是最简单的解决方案。

#include <stdio.h>

int main( void )
{
unsigned int a[] = { 12, 1234, 123456, 12345678, 1234567890 };
const unsigned int Base = 10;

for ( size_t i = 0; i < sizeof( a ) / sizeof( *a ); i++ )
{
unsigned int divisor = Base;
while ( a[i] / divisor > divisor ) divisor *= Base;

printf( "%u\t%u\n", a[i] / divisor, a[i] % divisor );
}
}

程序输出为

1       2
12 34
123 456
1234 5678
12345 67890

如果您要使用带符号的整数类型和负数,那么程序可以如下所示

#include <stdio.h>

int main( void )
{
int a[] = { -12, 1234, -123456, 12345678, -1234567890 };
const int Base = 10;

for ( size_t i = 0; i < sizeof( a ) / sizeof( *a ); i++ )
{
int divisor = Base;
while ( a[i] / ( a[i] < 0 ? -divisor : divisor ) > divisor ) divisor *= Base;

printf( "%d\t%d\n", a[i] / divisor, a[i] % divisor );
}
}

它的输出是

-1      -2
12 34
-123 -456
1234 5678
-12345 -67890

关于c - 将整数拆分为两个独立的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com