Помогите решить задачу по информатике на языке pascal Число Х получают следующим образом: слева на право записывают без пробелов подряд числа от 1 до N (123456...N). По заданному числу N определить, сколько цифр в числе Х. Помогите пожалуйста, даю много баллов, программировать умею, саму задачу не понимаю.
Воод
Т.е. если n>9, полагаем некое k=10^[номер прохода по циклу]-1, получая константы 9,99,999, и т.д.
Смотрите
Ограничение 10 000 000
написано так, N(1<=N<=10000000)
И по формуле дальше крутим. На самом деде все сложнее, это я схематически очень и неточно.
Короче...тупо объяснять детали олимпиадной задачи в комментариях...
И на будущее - не выставляйте за 20 баллов задач с олимпиад. Это слишком мало при их трудоемкости
Спасибо . Буду знать
Можно покороче и без biginteger, и без массивов))) var n,k,s,m,p:longint; begin Read(n); s:=0; k:=0; m:=1; p:=n; repeat inc(k); if p<10 then s:=s+k*(n-m+1)<br> else begin s:=s+k*9*m; m:=10*m end; p:=p div 10 until p=0; Writeln(s); end. Примеры: 5 5 15 21 120 252 1535323 9636157
Var s: biginteger; n,i: int64; ar:array of int64=(9,90,900,9000,90000,900000,9000000,90000000); begin i:=1; read(n); while n-ar[i-1]>=0 do begin s:=s+(ar[i-1]*i); n:=n-ar[i-1]; i:=i+1; end; if(n>0)then begin s:=s+(n*i); end; write(s); end.
Спасибо !!!!
Простая задача)
Я проверил) Просто огромнейшее спасибо !!!!
Не все, что изначально кажется простым, следует решать "в лоб" ))))