poj3077---进位

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char str[100000000];
int ar[100000000];
int main()
{
    int n,len,i;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",str);
        len=strlen(str);
        for(i=0;i<len;i++)
        {
            ar[i]= str[i] - '0';
        }
        for(i=len-1; i >= 1; i--)//至少是两位才会经过这个循环
        {
            if(ar[i] >= 5)
                ar[i-1]++;
            ar[i]=0;
        }
        for(i=0; i<len; i++)
            printf("%d",ar[i]);
        printf("
");
    }
    return 0;
}
View Code
题意:给一个数字,然后从最后一位开始进位,满5进1,小于5变成0,比如 12345 -> 12350->12400->12000->10000;
实际上:>=10的数,除第一位以外都会变成0,只需要看第一个数最后是多少
int main()
{
    int n;
    double tmp;
    scanf("%d",&n);
    while(n--)
    {
        int count=0;
        scanf("%lf",&tmp);
        while(tmp >= 10)
        {
            tmp/=10;
            tmp=(int)(tmp+0.5);
            cout++;
        }
        for(i=0;i<count;i++)
        {
            tmp*=10;
        }
    }
}
View Code

323/10=32.3+0.5

取整得32

32/10=3.2+0.5=3.7

取整得3

四舍五入的方法是(int)(x + 0.5)

这道题关键是对于一个数的每一位来说,四舍五入,>=5进,<5舍,进到第一位就行,后面再添0

原文地址:https://www.cnblogs.com/gabygoole/p/4589432.html