C 有没有办法将avalue赋值给一个变量,使赋值为另一个变量的前两位数字?

C 有没有办法将avalue赋值给一个变量,使赋值为另一个变量的前两位数字?,c,C,我目前正在大学做一个项目,我提出了一个逻辑,如果可能的话,可以帮助我更快地完成我的项目。 这就是我想做的, 假设 int a=2302; //user input(Now is there any way to do the following?) int b=23 //First two-digit of a int c=02; //Last two-digit of a 假设值的int值至少为10,则: char fdigs[3], ldigs[3]; int first2 = value

我目前正在大学做一个项目,我提出了一个逻辑,如果可能的话,可以帮助我更快地完成我的项目。 这就是我想做的, 假设

int a=2302; //user input(Now is there any way to do the following?)
int b=23 //First two-digit of a
int c=02; //Last two-digit of a

假设
int
值至少为10,则:

char fdigs[3], ldigs[3];
int first2 = value / (int)(pow(10.0, (int)(log10(value) + 1.0e-9 - 1.0)) + 0.5);
int last2 = value % 100;
sprintf(fdigs, "%02d", first2);
sprintf(ldigs, "%02d", last2);
将给出两个wee字符串中的数字(包括前导零,如果需要)

测试代码:

#include <stdio.h>
#include <math.h>

int main()
{
    int value;
    int first2, last2;
    char fdigs[3], ldigs[3];
    printf("\nEnter number: ");
    scanf("%d", &value);
    while (value >= 10) {
        first2 = value / (int)(pow(10.0, (int)(log10(value) + 1.0e-9 - 1.0)) + 0.5);
        last2 = value % 100;
        sprintf(fdigs, "%02d", first2);
        sprintf(ldigs, "%02d", last2);
        printf("First Two: %s; Last Two: %s", fdigs, ldigs);
        printf("\n\nEnter another number: ");
        scanf("%d", &value);
    }
    printf("\n");
    return 0;
}
#包括
#包括
int main()
{
int值;
int first2,last2;
char-fdigs[3],ldigs[3];
printf(“\n输入编号:”);
scanf(“%d”,和值);
而(值>=10){
first2=值/(int)(功率(10.0,(int)(log10(值)+1.0e-9-1.0))+0.5);
last2=值%100;
sprintf(fdigs,“%02d”,first2);
sprintf(ldigs,“%02d”,最后2个);
printf(“前两个:%s;后两个:%s”,fdigs,ldigs);
printf(“\n\n输入另一个数字:”);
scanf(“%d”,和值);
}
printf(“\n”);
返回0;
}

intb=a/100
。。。例如,如果数字大于9999,则前两位数字就不是。我个人更愿意使用更简单的
c=c%100
;有一些平台提供了一个普通的div+mod操作,在代码编写速度更快的平台上,我假设编译器在优化时会自己选择它……嗯,是的,它会的,除了1000以下的数字只有一个数字。对于负数来说基本上是一样的,“最佳”解决方案是一个非常主观的选择。我的答案适用于我测试过的所有不同的数字。事实上,它可能会失去浮点数学的精度,并且可能只给出一个结果。它也会随着非正数而消失。唯一正确的方法是使用一个好的while/for循环。嗯,当然,超过INT_MAX是不好的。我不是在说这个。由于浮点运算不够精确,即使对于小于INT_MAX的数字,结果也可能相差一个单位。我没有对每一个数字都进行测试,但仍然如此。换句话说,假设
pow(10.0,3)
由于浮点近似,给出了类似999.999995的结果,当转换到
int
时,它将变成999,结果将是
value/999
而不是
value/1000
@Marco Bonelli请参阅舍入错误的最新修复方法-假设
MAX_int<1e10
c
int
值不能是
02
:它是
2
。请注意,在一般情况下,
int
上的前导
0
表示其余数字以八进制解释。可能的
#include <stdio.h>
#include <math.h>

int main()
{
    int value;
    int first2, last2;
    char fdigs[3], ldigs[3];
    printf("\nEnter number: ");
    scanf("%d", &value);
    while (value >= 10) {
        first2 = value / (int)(pow(10.0, (int)(log10(value) + 1.0e-9 - 1.0)) + 0.5);
        last2 = value % 100;
        sprintf(fdigs, "%02d", first2);
        sprintf(ldigs, "%02d", last2);
        printf("First Two: %s; Last Two: %s", fdigs, ldigs);
        printf("\n\nEnter another number: ");
        scanf("%d", &value);
    }
    printf("\n");
    return 0;
}