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("\n");

    }

    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

你可能感兴趣的:(poj)