Merhaba,
Geçenlerde Ceviz.Net'de bir öğrenci için paylaşmıştım. Az önce bunu D'ye uyarlamaya karar verdim. Bir tek işlevi dışında (çünkü kütüphane bağımlığı olmayan ve her platforma uyarlanabilir bir yapıdaydı) sadeleştirdim. Böylesi daha güzel oldu; öyle ya, dizi uzunluğunu alma ve ters sıralama yapma gibi şeyler D'de çok kolay...:)
Bir de işin içine dinamik dizi ve ile parametre almayı ekleyince tadından yenmez oldu. Sanırım daha da çok geliştirmek mümkün ama bu sade şekliyle (iyice karıştırmadan!) paylaşayım:
import std.conv, std.stdio;
uint toInt(char a){//*
uint i;
for(i = 48; i<=57; i++)
if(cast(char)i == a) return i - 48;//*/
return 0;
}
void main(string[] args){
auto a1 = args.length > 1 ? args[1] : to!string(33);
auto a2 = args.length > 2 ? args[2] : to!string(100);
if(args.length < 2) write("Hiç toplanacak öğe girmediniz ben de ");
writefln("%s + %s sonucunu vereceğim:", a1, a2);
char[] n1 = cast(char[])a1;
char[] n2 = cast(char[])a2;
uint[] rs;
uint c1 = n1.length;
uint c2 = n2.length;
uint cmax = (c1>c2) ? c1 : c2;
uint sum, i, j, m = 0;
n1.reverse;
n2.reverse;
for(i = 0; i < cmax; i++) {
if((c1 == c2) || (i < c1 && i < c2)) {
sum = m + toInt( n1[i] ) + toInt( n2[i] );
} else if(i >= c1) {
sum = m + toInt( n2[i] );
} else if(i >= c2) {
sum = m + toInt( n1[i] );
}
rs ~= sum % 10;
m = sum / 10;
}
if(m) {
rs ~= m;
i++;
}
for(j=0; j < i; j++) write(rs[i-j-1]);
writeln;
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]