1到1亿的自然数,求所有数的拆分后的数字之和

1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6,如1到11拆分后的数字之和 => 1 + ... + 9 + 1 + 0 + 1 + 1

/**
     * 1到1亿的自然数,求所有数的拆分后的数字之和,
     * 如286 拆分成2、8、6,
     * 如1到11拆分后的数字之和 => 1 + ... + 9 + 1 + 0 + 1 + 1
     * @param args
     */
    public static void main(String[] args) {
        /**
         * 思路分析
         * 个位数:十位数:百位数:千位数:万位数:十万位数:百万位数:千万位数:亿
         */
        int a=1+2+3+4+5+6+7+8+9;//a=45
        int aa=10+a+2*10+a+3*10+a+4*10+a+5*10+a
                +6*10+a+7*10+a+8*10+a+9*10+a;//=10*(1+2+3+4+5+6+7+8+9)+9a;
        int aaa=100+aa+2*100+aa+3*100+aa+4*100+aa+5*100+aa
                +6*100+aa+7*100+aa+8*100+aa+9*100+aa;//=100a+9aa
        int aaaa=1000+aaa+2*1000+aaa+3*1000+aaa+4*1000+aaa+5*1000+aaa
                +6*1000+aaa+7*1000+aaa+8*1000+aaa+9*1000+aaa;//=1000a+9aaa
        int aaaaa=10000+aaaa+2*10000+aaaa+3*10000+aaaa+4*10000+aaaa+5*10000+aaaa
                +6*10000+aaaa+7*10000+aaaa+8*10000+aaaa+9*10000+aaaa;//=10000a+9aaaa;
        int aaaaaa=100000+aaaaa+2*100000+aaaaa+3*100000+aaaaa+4*100000+aaaaa+5*100000+aaaaa
                +6*100000+aaaaa+7*100000+aaaaa+8*100000+aaaaa+9*100000+aaaaa;//=100000a+9aaaaa;
        int aaaaaaa=1000000+aaaaaa+2*1000000+aaaaaa+3*1000000+aaaaaa+4*1000000+aaaaaa+5*1000000+aaaaaa
                +6*1000000+aaaaaa+7*1000000+aaaaaa+8*1000000+aaaaaa+9*1000000+aaaaaa;//=1000000a+9aaaaa;
        Long aaaaaaaa=((10000000l*a)+(9l*aaaaaaa));
        int aaaaaaaaa=1;
        System.out.println(a);
        System.out.println(aa);
        System.out.println(aaa);
        System.out.println(aaaa);
        System.out.println(aaaaa);
        System.out.println(aaaaaa);
        System.out.println(aaaaaaa);
        System.out.println(aaaaaaaa);
        System.out.println(aaaaaaaaa);
        long sum=a*(1+10+100+1000+10000+100000+1000000+10000000)+9l*(a+aa+aaa+aaaa+aaaaa+aaaaaa+aaaaaaa)+aaaaaaaaa;
        System.out.println(sum);

输出结果是:

45
855
12195
154755
1842795
21085155
234766395
2562897555
1
2820759751

网上看到的题目,自己尝试写的。

时间: 2024-08-02 12:04:42

1到1亿的自然数,求所有数的拆分后的数字之和的相关文章

Quick-Select 1亿个数快速求第K小的数 分治法

Quick-Select  1亿个数快速求第K小的数  分治法 利用快速排序的思想,一开始选取中枢元,然后左右调整,接着比对中枢元p和K的大小,如果 p+1 = k (数组从0开始), 那么a[p] 就是答案,因为在p之前的,肯定都是小于a[p]的, 在p之后的,肯定大于p, 所以 a[p] 就是第 p+1 小.假如 p+1 不等于K, 那么根据大小,进行左右调整.调整过程中,理想状态下,每次都砍掉一半,数组的起始坐标要进行调整. 代码: // 快速排序法的修改 #include <iostre

求数组中出现一次的数字

一个数组中只有一个数字出现一次,其余别的数字都出现两次,如何求出这个出现一次的数字?例如数组a[11]={1,2,2,3,3,4,4,5,5,6,6},则出现一次的是1,通过异或算法即可求出. 代码如下: int onediffent(int a[],int n) { int temp=0; for(int i=0;i<n;i++) temp=temp^a[i]; printf("%d\n",temp); } 补充:任何数与零异或等于任何数.任何数与自己相异或为0: 假如问题变成

[LeetCode] Sum Root to Leaf Numbers 求根到叶节点数字之和

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. For example, 1 / 2 3 T

自然数从1到n之间,有多少个数字含有1

    问题明确而简单.for循环肯定是不好的.       用递推方法:       定义h(n)=从1到9999.....9999  ( n 个 9)之间含有1的数字的个数.定义f(n)为n位数中含有1的数字的个数.    由定义可知:h(n)=f(1)+f(2)+f(3)+....+f(n); 则f(1)=h(1)=1;   f(2)=10^1+8*h(1).   f(3)=10^2+8*h(2).   f(4)=10^3+8*h(3).   ......   意义如下:f(4)是一个四位

求圆圈中剩下的最后一个数字

n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除第m个数字.求出在这个圆圈中剩下的最后一个数字. 这个问题在wiki上叫约瑟夫斯问题. 一开始的序列是 S(n): n-1, 0, 1, 2, 3, ...., n -2 (一个环) 删除了第k=(m-1)%n个数,之后变成 S': n-1, 0, 1,2,...,k-1,k+1,...,n-2 S(n-1)

16.有一分数序列 1/2,2/3,3/5,5/8,8/13,13/21,…求出这个序列的前200 项之和

使用向量: #include<iostream>#include<vector>using namespace std;int FenShu(int); int main(){    double sum=0,sum1=0;    for(int i=2;i<=200;i++)    {        sum1+=FenShu(i);    }    sum=sum1+0.5;    cout<<sum<<endl;    return 0;} int

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

/** * @author 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和. */ public class Sum { public static void main(String[] args) { double a = 1, b = 1, c = 0, s = 0; for (int i = 0; i < 20; i++) { c = a + b; s = s + c / a; b = a; a = c; } System.out.pri

华为测试 求小球落地5次后所经历的路程和第5次反弹的高度

假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高? 输入起始高度,int型 分别输出第5次落地时,共经过多少米第5次反弹多高 [去掉小数末尾无效的0] 样例输入:1 样例输出:2.875 0.03125 #include<iostream> using namespace std; double high(double H,int N); double total(double H,int N); int main() {

C++求有序数组旋转之后的最小数字

//问题是:有一万个员工在公司上班,公司为了统计上班人的年纪分布情况, //请将这一万多的人的年纪进行排序,分析一个比较好的算法. #include <iostream> #include <vector> #include <stdlib.h> #include <string.h> #include <stdio.h> #define _MAX_AGE_ 100 #define _MIN_AGE_ 0 #define _EXIT_ cout&