Recursive Digit Sum

  • + 0 comments

    C Codes:

    unsigned long digitSum(char *n, unsigned long len)
    {
        unsigned long sum = 0 ;
        for (unsigned long i=0;i <len ; i++) {
            sum += n[i] -'0';
        }
        return sum ;
    }
    
    int getDigits(unsigned long long t)
    {
        int d = 1;
        while(t>0) {
            t /= 10 ;
            d ++ ;
        }
        return d;
    }
    
    int superDigit(char* n, int k) {
        char * n2 = NULL ;
        unsigned long long sum = 0;
        sum = digitSum(n,strlen(n)) * k;
        int digits = getDigits(sum);
        
        printf("digits:%d\n",digits);
        
        n2 = malloc(digits+1);
        snprintf(n2,digits,"%llu",sum);
        n2[digits] = '\0';
        printf("n2:%s\n",n2);
        
        do {
            sum = digitSum(n2,strlen(n2));
            digits = getDigits(sum) ;
            //printf("n:%s, k:%d\n",n,k);      
            snprintf(n2,digits+1,"%llu",sum);
            n2[digits] ='\0';
            printf("sum:%llu digits:%d n:%s\n",sum,digits,n2);
        } while(sum>=10) ; 
        return sum ;
    }
    

    `