首页 > 其他分享 >poj-1519

poj-1519

时间:2023-05-23 16:32:14浏览次数:50  
标签:10 数字 val long num poj 1519 mod


//132K  0MS C++
#include <cstdio>
#include <cstring>

using namespace std;

long long getDigitSum(long long val) {
    long long digitSum = 0;
    if (val < 10) {
        return val;
    } else {
        while(val) {
            digitSum += val%10;
            val /= 10;
        }
    }
    return digitSum;
}

void solve(long long val) {
    while(val > 9) {
        val = getDigitSum(val);
    }
    printf("%lld\n", val);
}

char num[100];

int main() {
    // long long num;
    while(scanf("%s", num) != EOF) {
        if (num[0] == '0') {
            return 0;
        }
        long long sum = 0;
        for (int i = 0; i < strlen(num); i++) {
            sum += num[i] - '0';
        }
        solve(sum);
    }
}



水题, 就是要注意,最后的输入会非常大,long long, double都hold不住,直接用字符串存一下,然后预处理把每个位加一下就可以了.

其实这道题数据弱(如果输入很多,又对时间很要求的话,上面的code应该会TLE的),因为还是更为快捷的办法:

http://blog.sina.com.cn/s/blog_676070110100jw7q.html

一个数的数字根和该数mod 9 是关于9同余的。(其实这个题还是挺有意思的)

数字根:如果把一个大数的各位数字相加得到一个和,再把这个和的各位数字相加又得一个和,再继续作数字和,直到最后的数字和是个位数为止,
这最后的数称为最初那个数的“数字根”。这个数字根等于原数除以9的余数(直接对9取余),因此这个计算过程常常称为“合九法”。

“其实把一个大数加起来得到一个和;再把这个和的各位数字加起来得到一个和;这样下去,直到最后一得数为止。最合适这个数成为最初那个数的“数字根”。
这个数字根等于原数除以9的余数(直接对9取余)。这个计算过程,常常称为“弃九法”。  
  求数字根,最快的方法是原数的数字时把9舍去。列如385916的数字根,其中有9,而3+6,8+1都是9,就可以舍去,最后剩下5,就是数字根。”


证明如下:


设自然数N=a[n]a[n-1]…a[0],其中a[0],a[1]、…、a[n]分别是个位、十位、…上的数字,再设M=a[0]+a[1]+…+a[n],求证:N≡M(mod9).


证明:

∵ N=a[n]a[n-1]…a[0]=a[n]*10^n+a[n-1]*10^(n-1)+…+a[1]*10+a[0]. 

 又∵ 1≡1(mod 9), 

 10≡1(mod 9), 

 102≡1(mod 9), 

 … 

 10n≡1(mod 9). 

 上面这些同余式两边分别同乘以a[0]、a[1]、a[2]、…、a[n],再相加得: 

 a[0]+a[1]*10+…+a[n]*10^n≡(a[0]+a[1]+…+a[n])(mod 9), 

 即 N≡M(mod 9)

标签:10,数字,val,long,num,poj,1519,mod
From: https://blog.51cto.com/u_9420214/6333338

相关文章

  • poj-2362
    //132K141MSC++withbeginSearchPos#include<cstdio>#include<cstring>#include<cstdlib>usingnamespacestd;intcmp(constvoid*a,constvoid*b)//降序{return*(longlong*)b-*(longlong*)a;}longlongfourEdgeLeng......
  • poj-2371
    //524K63MSC++#include<cstdio>#include<cstring>#include<cstdlib>intcmp(constvoid*a,constvoid*b){return*((int*)a)-*((int*)b);}usingnamespacestd;constintMAX=100001;intarray[MAX];intdataBaseSiz......
  • poj-1930
    //144K0MSC++#include<cstdio>#include<cstring>#include<cmath>intgcd(inta,intb){if(b==0){returna;}elseif(a>b){returngcd(b,a%b);}else{returngcd(a,b%a);}}/......
  • poj-1023
    //184K0MSC++#include<cstdio>#include<cstring>usingnamespacestd;charNP[65];//-1:n,1:pcharstr[80];chardigitUsed[80];charbinaryExpression[80];intcaseNum;intlength;longlongval;voidsolve(longlongval){l......
  • poj-1401
    //408K375MSG++#include<cstdio>#include<cstring>longlongget2FactorNum(longlongN){longlongres=0;while(N){res+=N/2;N/=2;}returnres;}longlongget5FactorNum(longlongN){long......
  • poj-2231
    //264K 47MS C++#include<cstdio>#include<cstring>#include<cstdlib>constintMAX=10005;longlongcowLocation[10005];intcmp(constvoid*a,constvoid*b){ return*((longlong*)a)-*((longlong*)b);}longlongcowNum;......
  • poj-1308
    //392K0MSG++#include<cstdio>#include<cstring>usingnamespacestd;constintMAX=10000;intUF_set[MAX];voidUF_get_setId(intcurId){intparentId=UF_set[curId];if(parentId==0){return;}while(UF......
  • poj-1120
    //408K16MSG++#include<cstdio>#include<cstring>usingnamespacestd;intdish[20][20];intK[20][20];intD[16];intdays;intgetDensitySum(introwId,intcolumnId){intK=0;K+=dish[rowId][columnId];if(rowId......
  • poj-3641
    //712K0MSG++#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>usingnamespacestd;longlonga,p;//longlongpower2(longlonga,longlongn)//{//longlongret=1;//for(longlongm......
  • poj-1026
    //188K110MSC++#include<cstring>#include<cstdio>#include<iostream>usingnamespacestd;charstr1[205];charstr2[205];intkey[205];intcycleLength[205];//voidreplace(char*str,intkeyLength,intstrLength){//......