如何将10位数字分成两个5位数字?

时间:2015-08-04 10:12:23

标签: c split numbers

假设我有char[10]="1234567890。我希望它在两个5位数中打破它。我想问两件事,我需要在拆分之前将其转换为int,我将如何拆分

4 个答案:

答案 0 :(得分:1)

char num10[]="1234567890";
int n1, n2;
sscanf(num10, "%5d%5d", &n1, &n2);
printf("%d, %d\n", n1, n2);

答案 1 :(得分:0)

首先请注意,您应该编写char arr[11]="1234567890",或者更好,char arr[]="1234567890",因为您需要为包含字符串文字的空终止符提供空间。如果你不提供,编译器会计算出正确的大小。

但是有一种实现你想要的数字方式,这比使用字符串更有效。

  1. 以数字开头或将字符串转换为uint64_t,调用该数字x。您需要64位整数,因为对于32位整数,大约10位数字太大。

  2. 计算x / 100000.这是更重要的部分。

  3. 计算x%100000。这是最不重要的部分。

答案 2 :(得分:0)

如果你的问题有char arr[10] = "1234567890",请注意它不是字符串,因为它没有空间容纳NUL终结符(需要大小11,或者留空[]让编译器为你计数)。假设您需要两个字符串,则需要将两个半部分复制到单独的数组中,例如:

char topHalf[6], bottomHalf[6];         // 6 = 5 + NUL
(void) memcpy(topHalf, arr, 5);         // copy 5 chars from beginning of arr
(void) memcpy(bottomHalf, arr + 5, 5);  // arr + 5 to skip the 5 in topHalf
topHalf[5] = '\0';                      // terminate string
bottomHalf[5] = '\0';                   // "

答案 3 :(得分:-2)

你的意思是以下内容吗?

#include <stdio.h>

int main( void )
{
    char number[10] = "1234567890";
    const size_t N = sizeof( number ) / sizeof( *number );

    int num1 = 0, num2 = 0;
    int *p = &num1;

    for ( size_t i = 0; i < N; i++ )
    {
        if ( i == ( N + 1 ) / 2 ) p = &num2;

        *p = *p * 10 + number[i] - '0';
    }

    printf( "num1 = %d, num2 = %d\n", num1, num2 );
}    

程序输出

num1 = 12345, num2 = 67890