トップページに戻る    次のC++のサンプルへ    前のC++のサンプルへ

Problem40 正の整数を順に連結して得られる文字列

問題

正の整数を順に連結して得られる以下の10進の無理数を考える

0.123456789101112131415161718192021...
小数第12位は1である.

dnで小数第n位の数を表す. d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000 を求めよ.


ソース

#include <string>
#include <limits.h>
#include <Windows.h>
#include <stdio.h>

void main()
{
    std::string wkStr;
    for (int I = 1; I < INT_MAX; I++) {
        char wkCharArr[100];wsprintf(wkCharArr,"%d",I);
        wkStr += wkCharArr;
        if (wkStr.length() >= 1000000) break;
    }
    int V1 = wkStr.at(1 - 1) - '0';
    int V2 = wkStr.at(10 - 1) - '0';
    int V3 = wkStr.at(100 - 1) - '0';
    int V4 = wkStr.at(1000 - 1) - '0';
    int V5 = wkStr.at(10000 - 1) - '0';
    int V6 = wkStr.at(100000 - 1) - '0';
    int V7 = wkStr.at(1000000 - 1) - '0';
    printf("%d*%d*%d*%d*%d*%d*%d=%d\n", V1, V2, V3, V4, V5, V6, V7 , V1 * V2 * V3 * V4 * V5 * V6 * V7);
}


実行結果

1*1*5*3*7*2*1=210


解説

Stringクラスで順に連結していってます。