Как найти сумму цифр числа php

How do I find the sum of all the digits in a number in PHP?

mickmackusa's user avatar

mickmackusa

43.1k12 gold badges80 silver badges132 bronze badges

asked Jul 12, 2010 at 21:44

Leticia Meyere's user avatar

array_sum(str_split($number));

This assumes the number is positive (or, more accurately, that the conversion of $number into a string generates only digits).

answered Jul 12, 2010 at 21:47

Artefacto's user avatar

ArtefactoArtefacto

96k17 gold badges200 silver badges225 bronze badges

3

Artefactos method is obviously unbeatable, but here an version how one could do it «manually»:

$number = 1234567890;
$sum = 0;
do {
    $sum += $number % 10;
}
while ($number = (int) ($number / 10));

This is actually faster than Artefactos method (at least for 1234567890), because it saves two function calls.

answered Jul 12, 2010 at 22:01

NikiC's user avatar

NikiCNikiC

100k37 gold badges190 silver badges225 bronze badges

3

Another way, not so fast, not single line simple

<?php

    $n = 123;
    $nstr = $n . "";

    $sum = 0;
    for ($i = 0; $i < strlen($nstr); ++$i)
    {
        $sum += $nstr[$i];
    }
    echo $sum;

?>

It also assumes the number is positive.

answered Jul 12, 2010 at 21:53

BrunoLM's user avatar

BrunoLMBrunoLM

97.2k83 gold badges294 silver badges450 bronze badges

2

function addDigits($num) {

    if ($num % 9 == 0 && $num > 0) {
        return 9;
    } else {
          return $num % 9;
        }
    }

only O(n)

at LeetCode submit result:
Runtime: 4 ms, faster than 92.86% of PHP online submissions for Add Digits.
Memory Usage: 14.3 MB, less than 100.00% of PHP online submissions for Add Digits.

answered Mar 9, 2020 at 9:00

Aries's user avatar

AriesAries

312 bronze badges

0

<?php 
// PHP program to calculate the sum of digits 
function sum($num) { 
    $sum = 0; 
    for ($i = 0; $i < strlen($num); $i++){ 
        $sum += $num[$i]; 
    } 
    return $sum; 
} 

// Driver Code 
$num = "925"; 
echo sum($num); 
?> 

Result will be 9+2+5 = 16

answered Apr 20, 2020 at 23:57

user2446600's user avatar

1

Try the following code:

<?php

$num = 525;
$sum = 0;

while ($num > 0)
{
    $sum= $sum + ($num % 10);
    $num= $num / 10;
}
echo "Summation=" . $sum;

?>

kenorb's user avatar

kenorb

153k85 gold badges674 silver badges738 bronze badges

answered May 30, 2015 at 19:03

Mayank Dudakiya's user avatar

2

If interested with regex:

array_sum(preg_split("//", $number));

answered Sep 7, 2015 at 3:56

itsazzad's user avatar

itsazzaditsazzad

6,8397 gold badges69 silver badges87 bronze badges

    <?php
echo"----Sum of digit using php----";
echo"<br/ >";
$num=98765;
$sum=0;
$rem=0;
for($i=0;$i<=$num;$i++)
{
$rem=$num%10;
$sum=$sum+$rem;
$num=$num/10;
}
echo "The sum of digit 98765 is ".$sum;
?>
-----------------Output-------------
----Sum of digit using php----
The sum of digit 98765 is 35

answered Jul 13, 2018 at 20:14

Ashutosh Verma's user avatar

// math before code 

// base of digit sums is 9 

// the product of all numbers multiplied by 9 equals 9 as digit sum

$nr = 58821.5712; // any number

// Initiallization 

$d = array();

$d = explode(".",$nr); // cut decimal digits

$fl = strlen($d[1]); // count decimal digits

$pow = pow(10 ,$fl); // power up for integer

$nr = $nr * $pow; // make float become integer

// The Code

$ds = $nr % 9; // modulo of 9 

if($ds == 0) $ds=9; // cancel out zeros

echo $ds;

scopchanov's user avatar

scopchanov

7,84610 gold badges40 silver badges68 bronze badges

answered Aug 19, 2018 at 14:42

stereoIII6's user avatar

1

Assume you want to find the sum of the digits of a number say 2395 the simplest solution would be to first split the digits and find out the sum then concatenate all the numbers into one single number.

<?php
    $number=2;
    $number1=3;
    $number2=9;
    $number3=5;
    $combine=$number.$number1.$number2.$number3;
    $sum=$number+$number1+$number2+$number3;
    echo "The sum of $combine is $sum";
     ?>

answered Jan 5, 2018 at 7:29

Chandan Baruah's user avatar

One way of getting sum of digit however this is a slowest route.

$n=123;
while(($n=$n-9)>9);
echo "n: $n";

cfnerd's user avatar

cfnerd

3,57812 gold badges32 silver badges44 bronze badges

answered Dec 21, 2019 at 11:30

manimaran vadivel's user avatar

<html>
<head>
<title>detail</title>
</head>
<body>
<?php
$n = 123;
$sum=0; $n1=0;

  for ($i =0; $i<=strlen($n);$i++)
 {

  $n1=$n%10;

   $sum += $n1;
   $n=$n/10;
  }
 echo $sum;

 ?>
 </body>
</html>

answered May 7, 2013 at 16:19

user2359154's user avatar

Here’s the code.. Please try this

   <?php 
    $d=0;
   $num=12345;

   $temp=$num;

   $sum=0;

   while($temp>1)

     {
      $temp=$temp/10;

        $d++;
         }

     echo "Digits Are : $d </br>";

      for (;$num>1;)

             {
              $d=$num%10;

             $num=$num/10;

             $sum=$sum+$d;

             }

           echo "Sum of Digits is : $sum";

   ?>

The Hungry Dictator's user avatar

answered Feb 27, 2014 at 3:55

user3353933's user avatar

Если есть число, то что бы получить масисв символов, пхп вначале приведёт тип к строке, а потом берём символ и опять приводим к числу что бы получить сумму.

Эта же задача используется и для обучения в с, с++, паскале, вы и там будете переводить числа в строку и обратно? Я бы не стал А так как задача не жизненая, а для обучения составления алгоритмов, мне кажется деление уместнее всего

Но это по моему мнению, я не знаю что на уме у того кто её задавал. И я считал бы правильным способом как раз деление. И я уверен что деление будет в разы быстрей работать

Добавлено через 1 минуту

Цитата
Сообщение от KOPOJI
Посмотреть сообщение

тем более, если «заданное число» задается через форму — то приходит оно строкой, а не числом

Я ж говорю, забудьте о пхп на мгновение, и подойдите с точки зрения обучения программированию в общем, и обратите внимание на слово число

Подскажите, как сложить сумму чисел введенного пользователем? К примеру 534 должно быть 12

задан 15 ноя 2016 в 8:30

user227849's user avatar

2

2 ответа

Как вариант можно так:

echo array_sum(str_split('534'));

ответ дан 15 ноя 2016 в 9:28

Алексей Тупиченков's user avatar

0

function sumInt($var) {
    $var = strval($var);
    $sum = 0;

    for ($i = 0; $i < strlen($var); $i++) {
        $sum += (int)$var[$i];
    }

    return $sum;
}

$sum = sumInt(534);

ответ дан 15 ноя 2016 в 8:39

Apo-S's user avatar

Apo-SApo-S

2,26711 серебряных знаков24 бронзовых знака

За последние 24 часа нас посетили 11054 программиста и 939 роботов. Сейчас ищут 706 программистов …


  1. igorich76

    С нами с:
    13 май 2020
    Сообщения:
    2
    Симпатии:
    0

    Здравствуйте! Являюсь новичком. Решал задачи из задачника Григорьева https://codernet.ru/books/php/zadachnik_po_php_s_resheniyami/
    Стр. 3. Задача первая сверху: «Дано трехзначное числа. Найдите сумму его цифр.»

    1. <?php
    2. $var = 578; // Объявляем число
    3. $var .= ‘ ; // Приводим его к строковому типу
    4. echo $a = $var[2] + $var[1] + $var[0]; // Выводим переменную равную сумме цифр числа
    5. ?>

    Перепечатал программу в редактор. Выдаёт ошибку. Стал искать. Я новичок, поэтому стал тупо подбирать символы, не зная, где, собственно ошибка. Нашел ошибку. Оказывается, прога работает, если её записать так:
    3. $var .= ‘ ‘ ; // т.е. автор ошибся, не поставив вторую одинарную кавычку.
    Но!
    Вопрос в другом: объясните, пожалуйста, для чего нужна точка перед знаком =?
    Не могу нигде найти материал по этому вопросу. Поясните, пожалуйста.


  2. Artur_hopf

    Artur_hopf
    Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405


  3. Valick

    Valick
    Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328

    @igorich76 , для того, что бы переходить к практике и решать задачи необходимо для начала выучить теорию.

    В любом учебнике по РНР. РНР слаботипизированный язык программирования, точка (как и любая другая операция) перед знаком равно — это операция конкатенации применённая «к самому себе». Т.е.

    1. $var .= ‘ ‘; равно $var = $var .  ‘ ‘;

    В итоге $var из integer превращается в string.
    @igorich76 , бросай заниматься хернёй, просто возьми и прочти хотя бы одну книгу по РНР от корки до корки.

8 ответов

array_sum(str_split($number));

Это предполагает, что число положительно (или, точнее, преобразование $number в строку генерирует только цифры).

Artefacto
12 июль 2010, в 22:56

Поделиться

Метод Artefactos, безусловно, непревзойден, но здесь версия, как можно было бы сделать это «вручную»:

$number = 1234567890;
$sum = 0;
do {
    $sum += $number % 10;
}
while ($number = (int) $number / 10);

Это быстрее, чем метод Artefactos (по крайней мере, для 1234567890), поскольку он сохраняет два вызова функций.

NikiC
12 июль 2010, в 23:21

Поделиться

Другой способ, не так быстро, а не простая строка

<?php

    $n = 123;
    $nstr = $n . "";

    $sum = 0;
    for ($i = 0; $i < strlen($nstr); ++$i)
    {
        $sum += $nstr[$i];
    }
    echo $sum;

?>

Он также предполагает, что число положительно.

BrunoLM
12 июль 2010, в 22:27

Поделиться

Предположим, что вы хотите найти сумму цифр числа, скажем, 2395, самым простым решением было бы сначала разделить цифры и выяснить сумму, а затем объединить все числа в одно число.

<?php
    $number=2;
    $number1=3;
    $number2=9;
    $number3=5;
    $combine=$number.$number1.$number2.$number3;
    $sum=$number+$number1+$number2+$number3;
    echo "The sum of $combine is $sum";
     ?>

Chandan Baruah
05 янв. 2018, в 07:58

Поделиться

Если вас интересует регулярное выражение:

array_sum(preg_split("//", $number));

itsazzad
07 сен. 2015, в 05:44

Поделиться

<html>
<head>
<title>detail</title>
</head>
<body>
<?php
$n = 123;
$sum=0; $n1=0;

  for ($i =0; $i<=strlen($n);$i++)
 {

  $n1=$n%10;

   $sum += $n1;
   $n=$n/10;
  }
 echo $sum;

 ?>
 </body>
</html>

user2359154
07 май 2013, в 16:25

Поделиться

Вот код.. Пожалуйста, попробуйте это

   <?php 
    $d=0;
   $num=12345;

   $temp=$num;

   $sum=0;

   while($temp>1)

     {
      $temp=$temp/10;

        $d++;
         }

     echo "Digits Are : $d </br>";

      for (;$num>1;)

             {
              $d=$num%10;

             $num=$num/10;

             $sum=$sum+$d;

             }

           echo "Sum of Digits is : $sum";

   ?>

user3353933
27 фев. 2014, в 04:30

Поделиться

Попробуйте использовать следующий код:

<?php

$num = 525;
$sum = 0;

while ($num > 0)
{
    $sum= $sum + ($num % 10);
    $num= $num / 10;
}
echo "Summation=" . $sum;

?>

Mayank Dudakiya
30 май 2015, в 19:31

Поделиться

Ещё вопросы

  • 1Нарезка мультииндексированного столбца данных для получения нового кадра данных
  • 0Проверка нокаута при связывании hasfocus
  • 1Ошибка импорта — Tornado требует обновленный модуль SSL в Ubuntu 14.04
  • 1C3P0 тупик после того, как сервер простаивает в течение ночи
  • 0Пакет AWS Pear не работает для Macports php56
  • 0Как улучшить плагин автозаполнения jquery
  • 1Как Eclipse запускает карту, сокращая работу?
  • 1Преобразование даты и времени в формат отметки времени java «2019-02-21T14: 10: 18.161 + 0000»
  • 1Каков подходящий метод для передачи 2 разных моделей в контроллер из представления в MVC4?
  • 1включая простой файл JavaScript в конфигурации WebPack 2
  • 1Asp.Net MVC отправляет JSON как строку, всегда усеченную на сервере
  • 1Удалить средние элементы из массива
  • 0События во время выполнения на основе манифеста
  • 0prettyCheckable останавливает проверку jquery от работы в флажках
  • 1Как отслеживать и увеличивать количество дубликатов, используя hashmap
  • 1Firestore, как получить данные из пожарного магазина в представлении переработчика
  • 1Как перенаправить поток Request.Content
  • 1вставить новый экземпляр, используя API GCE
  • 0JPlayer не воспроизводит видео в IE
  • 1Как использовать DbNull.Value при условном присвоении значения столбца? [Дубликат]
  • 0Невозможно использовать цепной локатор в транспортире
  • 0Несколько форм разделяют один пост jquery
  • 0C ++ NTL (by Victor Shoup): как изобразить бесконечность
  • 0Изменение ориентации вызывает изменение размера шрифта
  • 0Qt4.8 периодическая отправка нерегулярных данных
  • 1Тестирование Junit: тестирование всех возможных границ?
  • 0Значения привязки PDO не работают [дубликаты]
  • 0Запустите удаленную команду Mysql с помощью сценария оболочки
  • 0JQuery скользящий div исчезает
  • 1Скомпилируйте javacode из запущенной java-сборки — в системе, в которой не установлен JDK
  • 0Прекращение загрузки файла Symfony2 с сервера Apache
  • 1Первая сборка приложения Node.JS в TFS 2015 Update2
  • 0jQuery totalStorage — Получить все ключи
  • 0Нажмите кнопку, чтобы установить сортируемый элемент jQuery UI на первую позицию.
  • 0Как сделать косую черту URL после основного домена с помощью .htaccess
  • 0Как сравнить две даты?
  • 0Странные символы распечатаны для UDP
  • 0Деструктор не разрушает объекты
  • 0Добавление файла в crontab через скрипт php
  • 0Загрузка разных объектов из файла
  • 0конструктор и конструктор копирования
  • 0Группа флажков
  • 1Сбой смешивания с ObservableAsPropertyHelper
  • 1Есть ли в Java контейнер с постоянным временем / журналом и постоянным доступом / журналом по времени индекса?
  • 1Windows Phone — привязка TextBox или другого элемента управления к параметру CommandParameter кнопки
  • 1AccessViolationException при добавлении элемента в список
  • 0Angularjs не публиковать скрытые значения
  • 1Вызовите функцию typed.js внутри компонента Vue
  • 0OpenGL 3.2+ Рисование кубов вокруг существующих вершин
  • 1Урожай без потерь в формате JPG без потери EXIF на Android

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти угол через синус калькулятор
  • Как найти свою работу по дате рождения
  • Как исправить ошибку когда запускаешь стим
  • Как найти энергию одной молекулы газа
  • Как найти идейных людей

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии