結果
| 問題 |
No.756 チャンパーノウン定数 (1)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-12-06 10:27:32 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 39 ms / 2,000 ms |
| コード長 | 1,057 bytes |
| コンパイル時間 | 321 ms |
| コンパイル使用メモリ | 30,848 KB |
| 最終ジャッジ日時 | 2025-01-06 18:23:56 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 |
ソースコード
/*
Code Teller [nthdigit]
input: standard input
output: standard output
*/
#include <stdio.h>
#include <stdlib.h>
//isatty
#if defined(WIN32) || (!defined(__GNUC__) && !defined(__clang__))
#include <io.h>
#else
#include <unistd.h>
#endif
int solve(long long n,long long starting,int base){
n+=starting-2;
long long digits=1;
long long expbase=1;
long long x;
for(;(x=digits*expbase*(base-1))<=n;n-=x){
digits++;
expbase*=base;
}
//(digits)桁の数を並べた中のn桁目を求めれば良い
long long num=expbase+n/digits;
long long d=digits-1-n%digits;
for(;d--;num/=base);
return num%base;
}
int main(int argc,char **argv){
long long starting=1;
int base=10;
if(isatty(fileno(stdin))){
fprintf(stderr,"nthdigit [starting=%lld] [base=%d] [<nthdigit.txt]\n",starting,base);
}
if(argc>2)base=strtol(argv[2],NULL,10);
if(argc>1)starting=strtoll(argv[1],NULL,base);
long long n;
for(;;){
if(isatty(fileno(stdin)))printf("input> ");
if(scanf("%lld",&n)<0)return 0;
printf("%d\n",solve(n,starting,base));
}
return 0;
}