Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> попарное суммирование цифр числа 
V
    Опции темы
APro
Дата 24.12.2008, 08:37 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 328
Регистрация: 5.12.2006

Репутация: 1
Всего: 1



Представим есть ряд чисел:

Код

9256431872


нужно разбить это число на отдельно 9, 2, 5, 6 и т.д. и после складывать первое со вторым, второе с третьим. (9+2, 2+5, 5+6 и т.д.), но если сумма есть двух значное число, то записываем только единицы. (например если 12, то нужно записать только 2)

и в итоге должно получиться:
Код

171074959


У кого какие идеи есть, чтобы это посчитать?


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
SneG0K
Дата 24.12.2008, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



А ты обьясни в чем сложность? Ты не можеш строку на числа разобрать? Или тебе не хочется самому писать?
PM WWW Skype   Вверх
APro
Дата 24.12.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 328
Регистрация: 5.12.2006

Репутация: 1
Всего: 1



Хорошо, я сейчас попробую в 100-ый раз сам, и если не получится, покажу код, а Вы попробуете объясняить где там ошибка ....


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
ТоляМБА
Дата 24.12.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Код
<?php 
$a="9256431872";
$len=strlen($a);
$f=substr($a,0,1);
$res="";
for ($i=1;$i<=$len-1;$i++)
    {$s=substr($a,$i,1);
    $sum=$f+$s;
    If ($sum>9)
        {$sum=10-$sum;}
    $res="$res"."$sum";
    $f=$s;}
$res=str_replace("-","",$res); #Почему то выводил числа с "-", пришлось поставить эту ф-ию
echo "<br>$res";
?>

PM   Вверх
_zorn_
Дата 24.12.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: 6
Всего: 12



deleted

Это сообщение отредактировал(а) _zorn_ - 24.12.2008, 11:03
PM MAIL   Вверх
DeamonShan
Дата 24.12.2008, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 26.11.2005

Репутация: 3
Всего: 6



_zorn_, в твоем случае, если сумма будет ровняться 10, условие не выполнится... поэтому думаю 

Код

if($sum>9) $sum=$sum-10;


из условия, $sum больше 10-ти будет!

Это сообщение отредактировал(а) DeamonShan - 24.12.2008, 11:19
PM MAIL   Вверх
ТоляМБА
Дата 24.12.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



DeamonShan, блин, точно, а я наоборот из 10 вычитал - вот откуда минусы то и шли  smile . Если заменить на твой вариант, то тогда реплейс конечно можно убрать!
PM   Вверх
Рыжий
Дата 24.12.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Тоже вариант:
Код

$s='987451235';

for($i=0;$i<strlen($s);$i++){
    if(!empty($s[$i+1])){
    //Сумма этого+следующего
    $sum=$s[$i]+($s[$i+1]);

    echo " Текущий - ".$s[$i].", следующий - ".$s[$i+1].", сумма = ".$sum."<br />";
    }      
}

Это же можно реализовать через array_walk() или другие циклы - сколько фантазии хватит. 
Еще не помешало бы добавить проверку на символы. Например $s может быть = "85475d  s59-%$".
PM MAIL ICQ   Вверх
theworldcreator
Дата 24.12.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

Репутация: 10
Всего: 13



Цитата

Еще не помешало бы добавить проверку на символы. Например $s может быть = "85475d  s59-%$". 

Приведение к int:
Код

$int_var = (int)$main_var;

PM MAIL WWW ICQ   Вверх
Рыжий
Дата 24.12.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



theworldcreator, При таком подходе, все знаки будут превращаться в 0, что даст ложные результаты.
Имхо нужно проверять заранее:
Код

$s='a'; 

if(is_int($r)) echo $r;
else die("Это не цифра!");


PM MAIL ICQ   Вверх
gibbzy
Дата 24.12.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 25.1.2008

Репутация: нет
Всего: 3



в чём проблема string есть массив из char  
Код

$f=substr($a,0,1);

это глупость
a php очень лояльная штука для преобразования переменных из одного типа в другой  
PM MAIL WWW ICQ   Вверх
theworldcreator
Дата 24.12.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

Репутация: 10
Всего: 13



Рыжий
Я имел ввиду изначально вместо проверки на "циферность" просто привести к int. Если это не число, из него получится ноль, а я думаю чувак, который пытается скормить ей(функции) текст не дебил и сам все поймет(без сообщения об ошибки).
PM MAIL WWW ICQ   Вверх
APro
Дата 24.12.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 328
Регистрация: 5.12.2006

Репутация: 1
Всего: 1



Спасобо ВСЕМ  smile Я оказывается был на верном пути. Мой код был немного похож на ТоляМБА, и, скажем, он один как бы меня исправил, за что получает "+"  smile 


--------------------
Никогда не спорь с дураком, другие могут не заметить между вами разницы.
Чем реже открываешь рот, тем меньше слышишь глупостей.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.