何とかChampernowne定数のシリーズを印刷するコードを入力するよう求められます。 (実際にそれに取り組む!) ので、我々はこのような一連のn番目の桁見つけたい:ここ 1234567891011121314...
は私のコードです:Champernowne定数(整数のシリーズ)C
#include <stdio.h>
long long int num(long long int a);
long long int f(long long int n);
long long int power(long long int a, long long int b);
long long int dig(long long int a, long long int b);
/*MAIN*/
int main(void) {
long long int n = 0, k = 0, r = 0, m = 0;
/* n , num(n) , primary result , range specifier */
scanf("%lld", &n);
k = num(n);
if (k <= 1) {
printf("%lld\n", n);
} else {
for (m = 0; n > f(power(10, m) - 1); m++) {
}
r = n - f(power(10, m - 1) - 1);
if (r % m == 0) {
printf("%lld\n", dig(power(10, m - 1) - 1 + r/m, 1));
} else {
printf("%lld\n",
dig(power(10, m - 1) - 1 + (int)r/m + 1, m + 1 - (r % m)));
}
}
return 0;
}
/*How many digits do we have ? */
long long int num(long long int a) {
long long int b = a;
long long int c = 0;
while (b != 0) {
b /= 10;
++c;
}
return c;
}
/* Power */
long long int power(long long int a, long long int b) {
if (b == 0) {
return 1L;
}
long long int c = 1;
long long int d;
d = a;
for (c = 1; c < b; c = c + 1) { a = a * d; }
return a;
}
/* Lets solve it! */
long long int f(long long int n) {
int k = num(n);
if (k == 1) { return n; }
return f(power(10, (k - 1)) - 1) + k * (n - (power(10, (k - 1)) - 1));
}
/*Digit */
long long int dig(long long int a, long long int b) {
long long int x = 0, z = 0, t = 0;
x = a % power(10, (b));
z = power(10, (b - 1));
t = x/z;
return t;
}
しかし、それが通過するのを失敗したので、それは、私が思うのギャップを持っていますそれが提供された7つのテストケースのうちの1つ!誰でも助けてくれますか?
「int k = num(n);」のMSVCコンパイラは、「初期化」という警告を表示します。「__int64」から「int」への変換、データの損失の可能性があります。ああ、*適切な字下げと空白の適切な使用でコードを書式設定する方法を学んでください。 –
...意味のある変数名を使用してください。それがすべての文字をタイプするのが退屈な場合は、コードを書いた後に検索/置換してください。 –
コードを読みやすくするために再フォーマットしました。このスタイルを試してみてください。 – chqrlie