CF #299 Div2 B
CodeForces #299 Div2 B Tavas and SaDDas
概要
ラッキーナンバーnが与えられる(1≤n≤10^9).ラッキーナンバーnは,10進数の4と7のみを含む正の整数による.例えば,47,744,4はラッキーナンバーであるが,5,17,467は,ラッキーナンバーでは無い.
入力
1行目にラッキーナンバーnが与えられる.
出力
1からnまでの全ての(ラッキーナンバー内の)数をカウントして,一行で出力する.
解法
入力された数値を一旦文字列化して,その上で4または7またはその双方が含まれているかどうかを判定する.…というのは考え付いた.たしかRubyでは文字列の数値(整数型)から文字型への変換ができたような気がする...気がするだけですが.他にも色々解法はあったようでした.
#include<bits/stdc++.h> using namespace std; int main(void){ char n[10]; //1,000,000,000 scanf("%s",&n); int leng = strlen(n); int cn=0; for(int i=0;i<leng;i++){ cn = cn<<1; if(n[i]=='7') cn++; cn++; } cout<<cn<<endl; }
ソースは他の提出者のソースをほぼ写しました.
感想
とりあえず,理屈は分かったのに書けないのが辛かった.4と7だけのケースを書いて,4と7を含む場合のソースは適当に書こうと思ってましたが,やっぱり無理でした.