Tam Sürümünü Görmek İçin : girilen basamak değerindeki sayıları toplama
girilen bi sayının mesela 455 sayısınını toplamı olan değer ekrana yazdırmasını 14şeklinde aşağıdaki kodu yazdım fakat toplamı yanlış alıyor nerde hatam var yardımcı olurmusunuz
# include <stdio.h>
# include <math.h>
int AddDigits (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
{
int sum;
sum=a + b + c + d + e + f + g + h + i + j;
return (sum);
}
int main()
{
char number[10];
int a, b, c, d, e, f, g, h, i, j, sum;
printf("Bir sayi girin..........>");
scanf("%d",&number);
a=number[1];
b=number[2];
c=number[3];
d=number[4];
e=number[5];
f=number[6];
g=number[7];
h=number[8];
i=number[9];
j=number[10];
sum=AddDigits(a, b, c, d, e, f, g, h, i, j);
printf("Sonuc %d",sum);
getchar();
getchar();
return(0);
}
1-) C de dizilerin indisi 0 dan başlar, 1 den değil.
a[10] için a[0] .. a[9] anlamlı.
2-) a = number[1]; dediğinde char değeri ( yani "rakamın" ansii kodu ) a'ya aktarılır , ki bu senin istediğin şey değil.
number[1]-'0' kullanabilirsin.
C yazmak bende alerji yaratıyor, buna bir bak seversen sende C++ kullanırsın.;)
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> IntArray;
int addDigits ( IntArray a)
{
int sum = 0;
for ( int i = 0 ; i < a.size() ; i++ ){
sum += a[i];
}
return sum;
}
int main()
{
cout<<"Bir sayi girin..........>";
string sayi;
cin>>sayi;
IntArray rakamlar;
for ( int i = 0 ; i < sayi.size() ; i++ ){
rakamlar.push_back( sayi[i]-'0' );
}
cout << "\n toplam : " << addDigits(rakamlar);
getchar();
return 0;
}
acehreli
03/05/2006, 01:34
Eger hata denetimi yapmayacaksak, daha da kisa bir sey buldum :)
#include <string>
#include <numeric>
#include <iostream>
using namespace std;
int karakter_ekle(int toplam, char karakter)
{
return toplam + (karakter - '0');
}
int main()
{
cout << "Bir sayi girin: ";
string sayi;
cin >> sayi;
cout << "Toplam: "
<< accumulate(sayi.begin(), sayi.end(), 0, karakter_ekle)
<< '\n';
}
Ali
çok teşekkür ederim acehreli iyi çalışmalar
myavuzselim
03/05/2006, 09:30
c++'daki accumulate hos birseymis. Bu gibi seyleri fonksiyonel bir dilde (mesela haskell) daha ileri duzeyde yapabiliriz:import Char
toplam = (foldl (+) 0) . (map ((flip (-) (ord '0')) . ord))
main = do x <- getLine
print (toplam x)veya:toplam = foldl (\n c -> n + (ord c - ord '0')) 0veya:toplam = foldl (+) 0 . map (\x -> x - (ord '0')) . map ord
veya:toplam "" = 0
toplam (x:xs) = (ord x - ord '0') + (toplam xs)
benim bu kodu c de yazmam gerekiyor bu konuda yardımcı olurmusunuz
myavuzselim
03/05/2006, 11:12
- toplam = 0 ile basla
- 'number'a "%s" ile (cunku sana string lazim) scanf yaptiktan sonra 'number' icindeki her karakter icin '\0' karakterine denk gelinceye kadar toplama (karakter-'0') ekle.
Veya hic char* ile ugrasma:
int number, toplam, i;
scanf("%d", &number);
toplam = 0;
while (number != 0) {
toplam += number % 10;
number /= 10;
}
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.