Форум программистов, компьютерный форум CyberForum.ru

int сумма char'ов - C++

Восстановить пароль Регистрация
 
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.03.2011, 14:00     int сумма char'ов #1
Дано n шестизначных чисел. Если сумма первых трех цифр не совпадает с суммой последних трех, то вывести Yes, иначе No.
Входной файл: input.txt
Первая строка-n
Следующие n строк-числа.
Выходной файл:output.txt
Пример:
input.txt
3
715068
445219
012200
output.txt
Yes
No
Yes
Это несколько упрощенное условие, оригинал тут.
Попробовал сделать так..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int a,i;
char p,b[6]; //p нужна для считывания мешающих "\n"
scanf("%ld%c",&a,&p);
for (i = 1; i <=a; i++) {
scanf("%c%c%c%c%c%c%c",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5],&p);
if ((int)(b[0]+b[1]+b[2])!=(int)(b[3]+b[4]+b[5])) {
printf("Yes\n");
}else  printf("No\n");
}
return 0;}
Числа считываются верно, но их сумма-смесь из цифр, букв и кракозябр...
P.S. в с++ я новичек-самоучка, так что желательно поподробнее.

Добавлено через 19 минут
С условием я поспешил, нужно сделать немного по-другому, но проблема остается актуальной:
если вставить printf("ld%c%ld",(int)(b[0]+b[1]+b[2]),' ',(int)(b[3]+b[4]+b[5]));
то выводится нечто непотребное=)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
18.03.2011, 14:43     int сумма char'ов #2
Чтобы получить цифры числа a
C
1
2
3
4
5
 int aa = a;
 for(i=5; i>=0; i--) {
   b[i] = aa%10;
   aa /= 10;
 }
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
18.03.2011, 14:58     int сумма char'ов #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
#define SIZE 6
 
int main()
{
    int i, k, N, X, Sl, Sr;
    scanf("%i", &N);
    for (k = 0; k < N; ++k) // 1 итерация - обработка 1 числа
    {
        scanf("%i", &X);
        Sl = Sr = 0; // Зануляем сумму цифр справа от центра и слева от центра
        for (i = 0; i < (SIZE / 2); ++i) // Цикл поиска суммы цифр, что лежат справа от центра
        {
            Sr += X % 10; // Берём последнюю цифру в сумму правых
            X /= 10; // Уменьшаем наше число, отбрасывая последний разряд
        };
        for (i = (SIZE / 2); i < SIZE; ++i) // ... и цикл для суммы левых цифр
        {
            Sl += X % 10; // Берём последнюю цифру в сумму левых
            X /= 10;
        };
        printf("%s\n", (Sr != Sl)?("YES"):("NO")); //выводим строку - если сумма левых не равна сумме правых, то "Да", если же равно, то "Нет"
    };
    return 0;
}
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
18.03.2011, 15:06     int сумма char'ов #4
Предлагаю маленькую оптимизацию
C
1
2
3
4
5
for(i=0; i<SIZE; i++) {
  if (i<SIZE/2) Sr += X%10;
  else            Sl += X%10; 
  X /= 10;
}
Yandex
Объявления
18.03.2011, 15:06     int сумма char'ов
Ответ Создать тему
Опции темы

Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru