11-06-2007 12:03 PM
Hi Experts,
below is my requirment.
IF have like 5 digit number 12356 (Customer number)
(here 6 is units, 5 is ten, 3 is hundred, 2 is thousand and 1 is ten thousands).
My caliculation is i have multiply this number in 2 or 1 like 2 is unit, 1 is ten,
2 is hundreds and 1 is thousands 2 is ten thousands .... and so on....
1 2 3 5 6
2 1 2 1 2 by multiply
-
2 2 6 5 12
now i have to add : 2 + 2 + 6 + 5 + 12 = 27
after 27 next 10 multiply number is 30
here 30 -27 = 3 is my final result
if the final added value is 32 next 10 multiply number is 40 40-32 =8 final value
if the final added value is 85 next 10 multiply number is 90 90-85 = 5 final value.
I need this logic, pls can any one help in this regards
Thanks in advance
Rams
P.S: full points will be awarded
Message was edited by:
ramesh
Message was edited by:
ramesh
Message was edited by:
ramesh
Message was edited by:
ramesh
11-06-2007 12:36 PM
Hi,
do 5 times.
x = 0.
tmp1 = number mod 10.
tmp2=number div 10.
if x mod 2 = 0.
tmp1 = tmp1*2.
else.
tmp1=tmp1*1.
endif.
sum = sum+tmp1.
enddo.
pre=sum mod 10.
final=10-pre.
Required value is final.
I have not checked it here. But this should solve ur problem with small changes.
Regards,
Subbu
11-06-2007 1:06 PM
Hi Ramesh
draft code
assumptions : KUNNR is always 10 char
REPORT YTEST67 .
data: v_kunnr type kunnr value '12356'.
data: v_kunnr1 type char10.
data: v_template type char10 value '1212121212'.
data: v_var1 type i,
v_var2 type i,
v_var3 type i.
data: cnt type i.
unpack v_kunnr to v_kunnr1.
do 10 times.
v_var1 = v_kunnr1+cnt(1).
v_var2 = v_template+cnt(1).
cnt = cnt + 1.
v_var3 = ( v_var1 * v_var2 ) + v_var3.
enddo.
clear v_var2.
if v_var3 > 100.
v_var2 = 10 - ( ( v_var3 mod 100 ) mod 10 ) .
else.
v_var2 = 10 - ( v_var3 mod 10 ) .
endif.
write v_var2.
Regards
Arun
11-06-2007 1:45 PM
Hi Arun,
You logic is very useful for me, but number :1040289 and 1100008 not give correct value, pls have a look.
Thanks
Rams
11-06-2007 1:58 PM
Hi Ramesh
Replace the last part by
IF v_var3 > 100.
v_var1 = ( ( v_var3 MOD 100 ) MOD 10 ).
IF v_var1 EQ 0.
v_var2 = 0.
ELSE.
v_var2 = 10 - v_var1 .
ENDIF.
ELSE.
v_var1 = ( v_var3 MOD 10 ).
IF v_var1 EQ 0.
v_var2 = 0.
ELSE.
v_var2 = 10 - v_var1 .
ENDIF.
ENDIF.
WRITE v_var2.
It is working for the second case now it should work for the first case also.
Regards
Arun
11-06-2007 2:05 PM
Hi Arun,
Same result, can you pls give me some idea.
orginal Exp values
value
1040289 9
1100000 7
1100001 5
1100002 3
1100003 1
1100004 9
1100005 6
1100007 2
1100008 0
1100009 8
1100010 6
1100011 4
1100012 2
1100013 0
1100014 8
1100015 5
1100016 3
1100017 1
1100018 9
1100019 7
1100021 3
1100022 1
1100023 9
1100024 7
1100025 4
1100026 2
1100027 0
1100059 3
1100060 1
1100061 9
1100062 7
Thanks in advance
Rams
11-06-2007 2:15 PM
Hi Ramesh
It seems to be working for all the cases , please let me know specifically which case is failing...
>>>>
REPORT ytest67 .
DATA: v_kunnr TYPE kunnr VALUE '1100000'.
DATA: v_kunnr1 TYPE char10.
DATA: v_template TYPE char10 VALUE '1212121212'.
DATA: v_var1 TYPE i,
v_var2 TYPE i,
v_var3 TYPE i.
DATA: cnt TYPE i.
UNPACK v_kunnr TO v_kunnr1.
DO 10 TIMES.
v_var1 = v_kunnr1+cnt(1).
v_var2 = v_template+cnt(1).
cnt = cnt + 1.
v_var3 = ( v_var1 * v_var2 ) + v_var3.
ENDDO.
CLEAR v_var2.
IF v_var3 > 100.
v_var1 = ( ( v_var3 MOD 100 ) MOD 10 ).
IF v_var1 EQ 0.
v_var2 = 0.
ELSE.
v_var2 = 10 - v_var1 .
ENDIF.
ELSE.
v_var1 = ( v_var3 MOD 10 ).
IF v_var1 EQ 0.
v_var2 = 0.
ELSE.
v_var2 = 10 - v_var1 .
ENDIF.
ENDIF.
WRITE v_var2.
Regards,
Arun
11-06-2007 1:31 PM
Hi,
Try this.
REPORT ztest_digit_calc.
DATA: num1(10) TYPE c VALUE '1235678',
num2(10) TYPE c,
x TYPE i,
y TYPE i,
num3(10) TYPE c,
num4(10) TYPE c.
DATA: BEGIN OF t_digit,
num TYPE i,
num1 TYPE i,
END OF t_digit.
DATA:lt_digit LIKE TABLE OF t_digit,
wa_digit LIKE LINE OF lt_digit.
x = STRLEN( num1 ).
y = x.
DO x TIMES.
x = x - 1.
num2 = num1+x(1).
wa_digit-num = num2.
APPEND wa_digit TO lt_digit.
ENDDO.
clear x.
LOOP AT lt_digit INTO wa_digit.
y = sy-tabix MOD 2.
IF y NE 0.
num2 = wa_digit-num * 2.
ELSE.
num2 = wa_digit-num * 1.
ENDIF.
num3 = num3 + num2.
ENDLOOP.
num4 = num3.
x = num3 mod 10.
while x NE 0.
num3 = num3 + 1.
x = num3 mod 10.
endwhile.
num3 = num3 - num4.
write : num3.
Reward points if useful.
Regards,
Vimal
11-06-2007 1:58 PM
Hi Vimal,
You logic is very useful for me, but some number first one, number not give correct value, pls have a look.
Orginal expected value
number
1040289 9
1100000 7
1100001 5
1100002 3
1100003 1
1100004 9
1100005 6
1100007 2
1100008 0
1100009 8
1100010 6
1100011 4
1100012 2
1100013 0
1100014 8
1100015 5
1100016 3
1100017 1
1100018 9
1100019 7
Thanks in advance