【问题标题】:Multiplying a number with its reverse position starting from 2从 2 开始将一个数字与其相反的位置相乘
【发布时间】:2017-10-06 17:26:38
【问题描述】:

我有一个小需求。如何获得以下输出:

输入字符串为123456

我需要找到相反的位置,从 2 开始,即234567。 现在将每个值与反向位置值相乘并相加。 eg:1*7+2*6+3*5+4*4+5*3+6*2在plsql中。

【问题讨论】:

  • 这是另一个家庭作业问题
  • 声明没有号码(20):='123456';长度编号; c VARCHAR2(40);添加 varchar2(40);总 VARCHAR2(40):=0; BEGIN FOR i IN 1..length(no) LOOP dbms_output.put_line('Looping '||i); c:=substr(no,i,1); dbms_output.put_line('C的值为' ||c);长度:=长度(无)+2; len:=len-i; dbms_output.put_line('长度为'||len);添加:=c*len;总计:=总计+加; dbms_output.put_line('乘法后'|| add); dbms_output.put_line('总计为'||总计);结束循环;结束;
  • 有什么办法可以让代码更高效?

标签: oracle loops plsql


【解决方案1】:

SQL Fiddle

查询 1

WITH data ( value, total ) AS (
  SELECT 123456, 0 FROM DUAL
UNION ALL
  SELECT TO_NUMBER( SUBSTR( value, 2 ) ),
         total + SUBSTR( value, 1, 1 ) * ( 1 + LENGTH( value ) )
  FROM   data
  WHERE  value IS NOT NULL
)
SELECT total FROM data WHERE value IS NULL

Results

| TOTAL |
|-------|
|    77 |

【讨论】:

  • 谢谢,但是我尝试了以下方法,有什么方法可以让它更有效吗?声明没有号码(20):='123456';长度编号; c VARCHAR2(40);添加 varchar2(40);总 VARCHAR2(40):=0; BEGIN FOR i IN 1..length(no) LOOP dbms_output.put_line('Looping '||i); c:=substr(no,i,1); dbms_output.put_line('C的值为' ||c);长度:=长度(无)+2; len:=len-i; dbms_output.put_line('长度为'||len);添加:=c*len;总计:=总计+加; dbms_output.put_line('乘法后'|| add); dbms_output.put_line('总计为'||总计);结束循环;结束;
  • @nkt。 SQL 是上面已经回答的最有效的方法。使用PLSQL 你已经解决了。如果您需要任何特殊帮助,请告诉我们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2012-11-07
  • 2021-12-15
相关资源
最近更新 更多